2010-08-18 187 views
0

我定義一個提交按鈕與form_remote_tag,from_remote_tag發送的請求HTTP POST代替AJAX XMLHTTP請求

<div class="form_row"> 
<% form_remote_tag :url => {:controller => '/group', :action => 'addgroup'}, :update => 'activitypage' do %> 
<%= submit_tag "Add!", :class => "submit" %> 
<% end %> 

我用提琴手並確認軌道代碼被譯成AJAX請求,

u003Cform action=\"/group/addgroup\" method=\"post\" onsubmit=\"new Ajax.Request('/group/addgroup', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;\"\u003E\n  \u003Cinput class=\"submit\" name=\"commit\" type=\"submit\" value=\"Add!\" /\u003E\n \u003C/form\u003E\n \u003C/div\u003E\n\u003C/fieldset\u003E \n\u003C/form\u003E\n"); 

$(「activitypage」)。visualEffect(「highlight」);然而,當我點擊按鈕時,客戶端(IE 8)瀏覽器實際發送了一個http post請求(見下文)而不是XMLHTTPRequest,因此我的javascript響應被拒絕了。任何想法?提前致謝。

POST http://192.168.1.31:3000/group/addgroup HTTP/1.1 

接受:圖像/ GIF,圖像/ JPEG,圖像/ PJPEG,圖像/ PJPEG,應用程序/ x-衝擊波閃光,應用/ vnd.ms-PowerPoint中,應用程序/ vnd.ms-Excel中,應用/ msword,application/x-ms-application,application/x-ms-xbap,application/vnd.ms-xpsdocument,application/xaml + xml,application/x-silverlight,/ Referer:http://192.168.1.31:3000/mywebapp Accept-Language :en-us 用戶代理:Mozilla/4.0(兼容; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6.5; .NET CLR 1.0.3705; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152 ; .NET CLR 3.5.30729) 內容類型:application/x-www-form-urlencoded Accept-Encoding:gzip,deflate Host:192.168.1.31:3000 Content-Length:84 Connection:Keep-Alive Pragma:no-cache Cookie:remember_me = 1; _session_id = 2ba880449df83115d15bab29b3c8ab30; authorization_token = 6419794165b8169cfff54053bddb40c9f0405782

回答

0

誰拒絕了迴應?

您的瀏覽器不應該發送XMLHTTPRequest作爲實際的HTTP方法。您的選擇僅限於GET和POST(加上HEAD,PUT,DELETE)。

AJAX請求實際上應該設置一個標頭,然後得到檢查:

'X-Requested-With' = 'XMLHttpRequest' 

用於將GET或POST的實際HTTP方法。

+0

from posting reque st上面,我們可以看到AJAX請求沒有發送'X-Requested-With'='XMLHttpRequest' – erwin 2010-08-21 01:28:33

+0

表單是使用javascript提交還是實際發送POST? – 2010-08-21 03:17:23

+0

該表單實際上是製作一個普通的HTTP帖子。 – erwin 2010-08-21 12:17:16

0

當服務器發回一個javascript頁面進行ajax頁面替換時,由於頁面格式不被接受,瀏覽器彈出一個文件下載窗口。我預計提交按鈕將發送一個Ajax請求與接受JavaScript頁面。但它沒有。爲什麼?

以下是收到提交請求後服務器的響應?

HTTP/1.1 200 OK 連接:關閉 日期:星期三,2010年8月18日2點26分31秒GMT 的Set-Cookie:_session_id = 2ba880449df83115d15bab29b3c8ab30;路徑=/ 狀態:200 OK X-運行時間:0.71081 的ETag: 「c4825b6e144b125ce655259083a12eff」 緩存控制:私人,最大年齡= 0,必重新驗證 服務器:雜種狗1.1。5 Content-Type:text/javascript;字符集= UTF-8 內容長度:17195

嘗試{ Element.update( 「activitypage」, 「\ u003Ch1 \ u003EGroup \ u003C/H1 \ u003E \ n \ u003Cscript SRC = \」/ Javascript角/原型。 js?1258680672 \「type = \」text/javascript \「\ u003E \ u003C \ script \ u003E \ n \ u003Cscript src = \」/ javascripts/effects.js?1258680672 \「type = \」text/javascript \ u003E \ script \ u003E \ n \ u003Cscript src = \「/ javascripts/dragdrop.js?1258680672 \」type = \「text/javascript \」\ u003E \ u003C/script \ u003E \ n \ u003Cscript src = \「 /javascripts/controls.js?1258680672 \「type = \」text/javascript \「\ u003E \ u003C/script \ u003E \ n \ u003Cscript src = \」/ javascripts/application.js?1258680672 \「type = \」text/javascript \「\ u003E \ u003C \ script \ u003E \ n \ u003Cbr \ u003E \ n \ n \ u003Ctable border = \」0 \「....