2008-10-19 71 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,但我沒有嘗試。