JQuery-$.ajax POST不会将.data发送到web服务器
我正在使用JQuery$.ajax post命令调用web服务器上的ajax事件:JQuery-$.ajax POST不会将.data发送到web服务器,jquery,ajax,jsp,post,Jquery,Ajax,Jsp,Post,我正在使用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){ ymmRecei
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组件成功地调用了网页,但它不包含任何post数据。ie-
“(HttpServletRequest)request.getParameterMap.size()==0”
-我预期为3,但实际为零
将上述命令从POST更改为GET可以使一切正常工作
TIA使用
成功
:
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);
}
});
试试这个:
$.ajax({
type: 'POST',
url: '/foo.jsp',
async: false,
data: { fe1: "y", fe2: "m", fe3: "m" },
complete: function(xmlRequestObject, successString){
ymmReceiveAjaxResponse(xmlRequestObject, successString);
}
});
它应该可以工作。您引用的代码很好(我在本地试用过)
我的猜测是,您问题中的formParams
字符串只是一个示例,实际上您正在做一些事情来动态生成该字符串,而问题在于该代码
例如,您确定转义字符正确吗(使用)?或者更好的是,让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);
}
});
我没有对字段名进行编码,因为这些名称中没有任何特殊字符;如果您的表单名称比这更有趣,则需要进行检查。问题的原因是使用FireBug和打开Net小工具发现的 我看到web服务器在调用web页面时响应状态为302 在Firebug/Net中扩展302请求,并检查参数、头、响应和HTML,很快发现这是源于服务器的特定于应用程序的问题
感谢大家的反馈经过四个小时令人沮丧的尝试,我发现通过在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("<h3>" + "Status : " + msg + "</h3>")
.fadeIn("slow");
}
});
var dataToSend={
“用户名”:$(“#用户名”).val(),
“密码”:$(“#密码”).val()
};
$.ajax({
类型:“POST”,
url:“somepage.jsp”,
数据:dataToSend,
contentType:“application/x-www-form-urlencoded;charset=UTF-8”//这是必须的
成功:功能(数据、消息、文本状态){
$(“#结果”).html(“+”状态:“+msg+”)
.fadeIn(“慢”);
}
});
他是否使用success
或complete
与最初未发送到服务器的数据无关。(如果他愿意,他可以使用complete
,它工作得很好。:-)你完全正确,这是存根代码;我实际上是在表单字段ie-var formParams=$(“#myForm”).serialize()上调用serialize()方法代码>,这似乎对我没有任何帮助。@Missy:Hmmm,serialize
将为您处理编码,所以不是这样。从根本上说,代码应该可以工作,并且在这方面确实可以工作,因此您必须逐步使用调试器,看看jQuery实际发送了什么。可能是jQuery正在完成它的工作,但无论出于什么原因,将请求路由到JSP的配置都会出错。这个问题在其他线程中已经得到了回答,因为我刚刚偶然发现了问题的原因——使用FireBug,打开网络嗅探器do hicky,我看到web服务器在调用web页面时响应状态为302。我将简要介绍一下我对这个问题的解决方案。我的错误是我试图访问$_POST['data']。。但是如果我想这样做,我必须像这样拥有数据:{data:'someValue'}。。谢谢你把它清理干净!