2011-11-02 114 views
2

當我運行類型爲「POST」的ajax請求時,參數不包含在字符串中。jQuery ajax POST調用 - 不包含參數

此代碼:

$telerik.$.ajaxSetup({ 
     accepts: 'application/json, text/javascript, */*' 
    }); 

    var parameters = { 
     "playerId": args.playerId 
    }; 

    var ajaxCallParameters = { 
    async: true, 
    cache: false, 
    url: "../Services/CmsWebService.svc/SendUpdateRequestToPlayer", 
    type: "POST", 
    data: parameters, 
    dataType: 'json', 
    error: function (jqXHR, textStatus, errorThrown) { 
     var errorString = 'Error thrown from ajax call: ' + textStatus + 'Error: ' + errorThrown; 
     var displayPanel = document.getElementById('requestStatusUpdateResults'); 
     $telerik.$(displayPanel).text(errorString); 

    }, 
    success: function (data, textStatus, jqXHR) { 
     var displayPanel = document.getElementById('requestStatusUpdateResults'); 
     $telerik.$(displayPanel).text(data.d); 
    } 
    }; 

    $telerik.$.ajax(ajaxCallParameters); 

觸發該請求(在提琴手觀察)

POST /Web/Services/CmsWebService.svc/SendUpdateRequestToPlayer HTTP/1.1 

正如你可以看到,不包含該參數。

如果我只是在代碼更改單詞「POST」到「GET」,那麼這就是要求:

GET /Web/Services/CmsWebService.svc/SendUpdateRequestToPlayer?playerId=1&_=1320213556288 HTTP/1.1 

這是怎麼回事?什麼是關於POST停止請求參數被包括在內?

回答

4

HTTP POST的行爲與GET不同。當您使用HTTP GET時,它會將參數作爲URL的查詢字符串的一部分發送,這就是您看到它們添加的原因。但是,當您使用HTTP POST時,參數將作爲HTTP Body的一部分發送,因此它們不會添加到URL中。

使用POST而不是GET的原因是GET參數在某些瀏覽器中具有大小限制,而通過POST提交時,您可以擁有幾乎任何長度的參數。

根據正在使用的後端服務器技術,服務器可能會將GET參數和POST參數視爲相同,因此您的後端服務將處理一個罰款。但是,在很多情況下,您必須通過GET & POST專門編寫後端服務以接受參數。

0

Fidller不顯示POST變量。你可以看到這些可變點擊URL,然後督察>的WebForms

如果仍然不工作,試試這個:

var parameters = { 
    "playerId": args.playerId 
}; 
$.post("../Services/CmsWebService.svc/SendUpdateRequestToPlayer",parameters),function(data) { 
     $("#requestStatusUpdateResults").text(data.d); 
},'json"); 
+0

其實,提琴手不顯示POST變量 - 你只是看在TextView的面板檢查器選項卡下的查詢。 –