2008-10-19 53 views
1

我试图创建一个POST请求,不幸的是POST的正文似乎永远不会被发送。AJAX.Request POST正文不发送

下面是我正在使用的代码。代码在用户点击链接时调用,而不是表单“提交”按钮。它运行时没有错误,调用正在调用的servlet,但正如我前面提到的那样,POST的主体似乎永远不会被发送。

我可以验证请求正文永远不会被发送,因为我可以访问被调用的servlet。

我试过使用“参数”来代替“requestBody”。我也尝试过使用参数字符串(x = a?y = b)。我也验证了“ckULK”确实包含有效的值。

任何想法?

new Ajax.Request(sURL, 
{ 
    method: 'POST' 
    , contentType: "text/x-json" 
    , requestBody: {ulk:ckULK} 
    , onFailure: 
     function(transport) 
     { 
      vJSONResp = transport.responseText; 
      var JSON = eval("(" + vJSONResp + ")"); 
      updateStatus(JSON.code + ": " + JSON.message); 
     } // End onFailure 
    , onSuccess: 
     function(transport) 
     { 
      if (200 == transport.status) 
      { 
       vJSONResp = transport.responseText; 
      } 
      else 
      { 
       log.value += "\n" + transport.status; 
      } 
     } // End onSuccess 
}); // End Ajax.request 
+0

当你设置一个常规表单的帖子时,没有涉及AJAX,它在相同的情况下工作吗?我在问,因为如果你使用IE,有一个非显而易见的专业知道。 – Tomalak 2008-10-19 10:33:26

回答

5

这些是Firebug和Firefox真的很有帮助的情况。我建议你安装Firebug,如果你没有它并检查正在发送的请求。

你也一定要坚持parameters而不是requestBody

此:

new Ajax.Request(sURL, 
{ 
    method: 'POST', 
    parameters: 'hello=world&test=yes', 
    onFailure: function(transport) { 
     vJSONResp = transport.responseText; 
     var JSON = eval("(" + vJSONResp + ")"); 
     updateStatus(JSON.code + ": " + JSON.message); 
    }, 
    onSuccess: function(transport) { 
     if (200 == transport.status) { 
      vJSONResp = transport.responseText; 
     } else { 
      log.value += "\n" + transport.status; 
     } 
    } 
}); 

绝对应该工作。

1

简单地传递数据parameters Ajax请求的构造函数:

new Ajax.Request(url, { 
    method: 'POST', 
    parameters: { 
    hello: "world", test: "test" 
    }, 
    onSuccess: function(transport){ 
    var data = transport.responseText.evalJSON(); 
    } 
}); 
0

当我打这个问题的解决方案是从Ajax.Request选项中删除contentType

answer通过Paolo BergantinocontentType没有在Ajax.Request选项中定义。

从未知的原因parameters中定义的参数没有发送(FF没有显示它们,我的服务器看到空的POST主体)。

我的一位同事建议使用postBody而不是parameters,但我没有尝试。