2011-12-11 60 views
0

我有一個Greasemonkey腳本通過ajax請求(後)與所有必需的名稱/值對提交表單。我收到了對請求的響應,但它不包含對發佈到頁面的數據的任何響應。例如,服務器應該回應一些數據,如價格,重量等。但它就好像它沒有在ajax請求中看到名稱值對。麻煩jQuery ajax後沒有提交數據到ASP頁

我正在尋找Firebug中用於Ajax調用的ajax post參數,它們與正常頁面提交中的post參數完全相同。本網站要求您使用用戶名/密碼登錄,但一旦登錄,我想它會保持Cookie狀態。 Ajax調用能夠工作的原因是因爲它沒有向Ajax請求中的服務器發送特定的cookie?查看與ajax請求發送的cookie與通常頁面提交發送的cookie相同。只有一個被列爲HttpOnly。不知道這是否有所作爲。

我從來沒有在過去遇到過這個問題,並且很難理解爲什麼我無法得到這個工作。

// ==UserScript== 
// @name   test 
// @description test 
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js 
// @include  *http://extranet.alliancels.net/ordering/ebusiness/Pricing.aspx* 
// ==/UserScript== 

    jQuery.ajax({ 
    url: 'http://extranet.alliancels.net/ordering/ebusiness/Pricing.aspx', 
    data: '__EVENTTARGET=&__EVENTARGUMENT=&__SCROLLPOSITIONX=0&__SCROLLPOSITIONY=0&__VIEWSTATE='+encodeURIComponent(jQuery('#__VIEWSTATE').val())+'&ctl00$ContentPlaceHolder1$txtQuantity=1&ctl00_ContentPlaceHolder1_txtPartNumber=70367301P&ctl00_ContentPlaceHolder1_btnSubmit=Submit', 
    type: 'POST', 
    async: false, 
    cache: false, 
    success: function(data){ 
     } 
    }); 

我意識到成功回調中沒有什麼,我只是看着螢火蟲的迴應。

編輯:我想這和它仍然沒有恢復「正常」的反應

// ==UserScript== 
// @name   test 
// @description test 
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js 
// @include  *http://extranet.alliancels.net/ordering/ebusiness/Pricing.aspx* 
// ==/UserScript== 


jQuery('#ctl00_ContentPlaceHolder1_txtPartNumber').val('70367301P'); 
var form_data = $('#aspnetForm').serialize(); 

    jQuery.ajax({ 
    url: 'http://extranet.alliancels.net/ordering/ebusiness/Pricing.aspx', 
    data: form_data, 
    type: 'POST', 
    async: false, 
    cache: false, 
    processData: false, 
    success: function(data){ 
     } 
    }); 
+0

這個請求是由它發起的同一個域創建的嗎? – Jasper

+0

是的,正如你在@include中看到的那樣,它是與ajax調用相同的URL。 – user357034

+0

該頁面是否可能向服務器發送多個帖子?也就是說,它使用*狀態*檢查? ...另外,我們實在無法從這個問題中分辨出更多。發佈表單HTML和任何相關的JS。 –

回答

0

您的數據必須是鍵,值對這樣的:

data: { 'keyname' : 'value' } 
在你的代碼

jQuery.ajax({ 
    url: 'http://extranet.alliancels.net/ordering/ebusiness/Pricing.aspx', 
    data: { 'data' : '__EVENTTARGET=&__EVENTARGUMENT=&__SCROLLPOSITIONX=0&__SCROLLPOSITIONY=0&__VIEWSTATE='+encodeURIComponent(jQuery('#__VIEWSTATE').val())+'&ctl00$ContentPlaceHolder1$txtQuantity=1&ctl00_ContentPlaceHolder1_txtPartNumber=70367301P&ctl00_ContentPlaceHolder1_btnSubmit=Submit'} 
    type: 'POST', 
    async: false, 
    cache: false, 
    success: function(data){ 
     } 
    }); 

您只發布價值。提供一鍵,你可以用它在服務器端檢索:

string posteddata= Request.Form["keyname"]; 
+1

這是不正確的,只顯示一個關鍵字「數據」和其他所有值作爲值。 – user357034

+0

是的,問題在於你發送數據的方式是正確的。我只是舉一個例子。如果你想發送更多的數據,你應該做更多的關鍵:值對。例如:{'key1':'value1','key2':'value2','key3':'value3'} –

+0

所有應有的尊重,我精確地複製了您的代碼,併發布了我上面所述的數據,鍵名和剩下的值。那麼你能否解釋爲什麼我在FB中看到這個結果? – user357034

0

我一直在與ASP MVC最近很多,有時當我想要的數據作爲的FormCollection我將包裹在阿賈克斯的輸入字段.BeginForm標記,類似於這樣

@using (Ajax.BeginForm("ActionName", "Controller", null, new AjaxOptions 
      { }, new { id ="AjaxForm" })) 

我相信,當它呈現出來,它看起來是這樣的:

<form action="ActionName" data-ajax="true" data-ajax-url="/Controller/ActionName" id='AjaxForm'> </form> 

這將使形式實際發佈FormC ollection就像一個'正常'POST ...你可能需要複習一點我不在我的開發筆記本電腦上的語法來給你確切的代碼,但它或多或少像上面那樣。