2011-04-08 143 views
9

我使用jQuery $就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

+0

這個問題已經有了答案在其他線程中,因爲我剛剛偶然發現了問題的原因 - 使用FireBug,並打開Net嗅探器do-hicky,我看到Web服務器在響應狀態302時響應網頁。我會稍微概述一下我對這個問題的解決方案。 – 2011-04-08 16:50:07

回答

-1

使用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); 
    } 
}); 
+2

無論他使用'success'還是'complete',都不會影響數據未被髮送到服務器。 (如果他願意,他可以使用'complete',它工作的很好。:-)) – 2011-04-08 14:24:53

1

試試這個:

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

它應該工作。

+0

我的錯誤是我試圖訪問$ _POST ['data'] ..但如果我想這樣做,我會必須擁有這樣的**數據:{data:'someValue'},** ..感謝您清理它! – gnB 2015-06-05 22:54:37

1

您的代碼是好的(我試過在本地)。

我的猜測是,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); 
    } 
}); 

目前我還沒有編碼的字段名,因爲這些名稱沒有在他們的任何特殊字符;如果你的表單名稱比這更有趣,你需要。

+0

你完全正確,這是存根代碼;我實際上調用表單字段上的serialize()方法,即 - var formParams = $(「#myForm」)。serialize();',這似乎沒有爲我做任何事情。 – 2011-04-08 15:54:22

+0

@Missy:嗯,'serialize'會處理你的編碼,所以不是這樣。從根本上說,代碼應該工作,並在這方面工作,所以你必須通過一個調試器,並看看實際發送的jQuery。可能是因爲jQuery在做它的工作,但無論出於何種原因,將請求路由到您的JSP的配置已經搞亂了。 – 2011-04-08 16:16:10

5

問題的原因使用Firebug打開打開網絡小工具被發現。

我看到的是,Web服務器上調用網頁中的狀態302響應。

擴大在螢火蟲/ Net向302請求,並檢查參數,頭,響應和HTML很快發現,這是發起服務器上的應用程序特定的問題。

感謝大家的反饋

0

令人沮喪嘗試了四個小時以後,我發現它能夠在阿賈克斯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"); 
    } 
});