Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JQuery-$.ajax POST不会将.data发送到web服务器_Jquery_Ajax_Jsp_Post - Fatal编程技术网

JQuery-$.ajax POST不会将.data发送到web服务器

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

我正在使用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组件成功地调用了网页,但它不包含任何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'}。。谢谢你把它清理干净!