JQuery – $ .ajax POST不会将.data发送到Web服务器

我正在使用JQuery $ .ajax post命令在我的Web服务器上调用ajax事件:

var formParams = "fe1=y&fe2=m&fe3=m"; $.ajax({ type: 'POST', url: '/foo.jsp', async: false, data: formParams, complete: function(xmlRequestObject, successString){ ymmReceiveAjaxResponse(xmlRequestObject, successString); } }); 

ajax组件成功调用了网页,但它不包含任何发布数据。
即 – "(HttpServletRequest) request.getParameterMap.size() == 0" – 我期待3,但我得到零。

将上述命令从POST更改为GET使一切正常。

TIA

使用FireBug并打开Net小工具打开了问题的原因。

我看到Web服务器在对网页的调用中响应状态302。

扩展了Firebug / Net中的302请求,并检查了Params,Headers,Response和HTML,很快发现它是源自服务器的特定于应用程序的问题。

感谢大家的反馈

试试这个 :

 $.ajax({ type: 'POST', url: '/foo.jsp', async: false, data: { fe1: "y", fe2: "m", fe3: "m" }, complete: function(xmlRequestObject, successString){ ymmReceiveAjaxResponse(xmlRequestObject, successString); } }); 

它应该工作。

引用的代码很好(我在本地尝试过)。

我的猜测是你的问题中的formParams字符串只是一个例子,实际上你正在做一些事情来动态生成该字符串,而问题在于代码。

例如,您确定要正确转义字符(使用encodeURIComponent )吗? 或者更好的是,让jQuery处理它,像这样:

 $.ajax({ type: 'POST', url: '/foo.jsp', async: false, data: { fe1: $("#somefield1").val(), fe2: $("#somefield2").val(), fe3: $("#somefield3").val() }, complete: function(xmlRequestObject, successString){ ymmReceiveAjaxResponse(xmlRequestObject, successString); } }); 

如果传入一个对象,jQuery将为您处理URI编码。 如果你真的想自己做:

 var formParams = "fe1=" + encodeURIComponent($("#somefield1").val()) + "fe2=" + encodeURIComponent($("#somefield2").val()) + "fe3=" + encodeURIComponent($("#somefield3").val()); $.ajax({ type: 'POST', url: '/foo.jsp', async: false, data: formParams, complete: function(xmlRequestObject, successString){ ymmReceiveAjaxResponse(xmlRequestObject, successString); } }); 

在那里,我没有编码字段名称,因为这些名称中没有任何特殊的字符; 如果您的表单名称比这更有趣,您需要。

经过四个小时的沮丧尝试后,我发现它可以通过在ajax POST设置contentType来实现这一目的,如下所示,

 var dataToSend = { "username" : $("#username").val(), "password" : $("#password").val() }; $.ajax({ type: "POST", url: "somepage.jsp", data: dataToSend, contentType: "application/x-www-form-urlencoded; charset=UTF-8", //this is must success: function(datum, msg, textStatus){ $("#result").html("

" + "Status : " + msg + "

") .fadeIn("slow"); } });

使用success

 var formParams = "fe1=y&fe2=m&fe3=m"; $.ajax({ type: 'POST', url: '/foo.jsp', async: false, data: formParams, success: function(data) { alert('response data = ' + data); } });