【问题标题】:from_remote_tag sent request http post instead of ajax XMLHTTP requestform_remote_tag 发送请求 http post 而不是 ajax XMLHTTPrequest
【发布时间】:2010-08-18 20:23:41
【问题描述】:

我用 form_remote_tag 定义了一个提交按钮,

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

我使用了 fiddler 并确认 rails 代码被翻译成 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

接受:image/gif、image/jpeg、image/pjpeg、image/pjpeg、application/x-shockwave-flash、application/vnd.ms-powerpoint、application/vnd.ms-excel、application/msword、application /x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-silverlight, / 推荐人:http://192.168.1.31:3000/mywebapp 接受语言: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 接受编码:gzip,放气 主机:192.168.1.31:3000 内容长度:84 连接:保持活动 Pragma:无缓存 饼干:remember_me=1; _session_id=2ba880449df83115d15bab29b3c8ab30;授权令牌=6419794165b8169cfff54053bddb40c9f0405782

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    谁拒绝了回复?

    您的浏览器不应该发送 XMLHTTPRequest 作为实际的 HTTP 方法。您的选择仅限于 GET 和 POST(加上 HEAD、PUT、DELETE)。

    AJAX 请求实际上应该设置一个标头,然后进行检查:

    'X-Requested-With' = 'XMLHttpRequest'
    

    实际使用的 HTTP 方法是 GET 或 POST。

    【讨论】:

    • 从上面贴出的请求我们可以看到AJAX请求没有发送'X-Requested-With' = 'XMLHttpRequest'
    • 表单是使用 javascript 提交还是实际进行 POST?
    • 表单实际上是在做一个普通的HTTP post。
    • 我想通了。 form_remote_tag 被 form_to 交出。因此 ajax_request 提交被替换为常规提交。
    【解决方案2】:

    当服务器发回一个用于 ajax 页面替换的 javascript 页面时,由于页面格式不被接受,浏览器会弹出一个文件下载窗口。我预计提交按钮将发送一个接受 javascript 页面的 ajax 请求。但它没有。为什么?

    以下是服务器收到提交请求后的响应?

    HTTP/1.1 200 正常 连接:关闭 日期:格林威治标准时间 2010 年 8 月 18 日星期三 02:26:31 设置 Cookie:_session_id=2ba880449df83115d15bab29b3c8ab30;路径=/ 状态:200 OK X 运行时:0.71081 ETag:“c4825b6e144b125ce655259083a12eff” 缓存控制:私有,max-age=0,必须重新验证 服务器:Mongrel 1.1.5 内容类型:文本/javascript;字符集=utf-8 内容长度:17195

    试试{ Element.update("activitypage", "\u003Ch1\u003EGroup\u003C/h1\u003E\n\u003Cscript src=\"/javascripts/prototype.js?1258680672\" type=\"text/javascript\"\u003E\u003C /script\u003E\n\u003Cscript src=\"/javascripts/effects.js?1258680672\" type=\"text/javascript\"\u003E\u003C/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 边框=\"0\" ....

    【讨论】:

      猜你喜欢
      • 2016-07-11
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      相关资源
      最近更新 更多