【问题标题】:Ajax request gets to server but page doesn't update - Rails, jQueryAjax 请求到达服务器但页面没有更新 - Rails,jQuery
【发布时间】:2010-03-18 05:29:34
【问题描述】:

所以我有一个场景,我的 jQuery ajax 请求正在访问服务器,但页面不会更新。我被难住了……

这里是 ajax 请求:

$.ajax({
    type: 'GET',
    url: '/jsrender',
    data: "id=" + $.fragment().nav.replace("_link", "")
});

查看 rails 日志,我得到以下信息:

Processing ProductsController#jsrender (for 127.0.0.1 at 2010-03-17 23:07:35) [GET]
Parameters: {"action"=>"jsrender", "id"=>"products", "controller"=>"products"}
  ...
Rendering products/jsrender.rjs
Completed in 651ms (View: 608, DB: 17) | 200 OK [http://localhost/jsrender?id=products]

因此,在我看来,ajax 请求正在到达服务器。 jsrender 方法中的代码正在执行,但 jsrender.rjs 中的代码没有触发。这是方法,jsrender:

def jsrender
    @currentview = "shared/#{params[:id]}"   
    respond_to do |format|
        format.js {render :template => 'products/jsrender.rjs'}
    end
end

为了论证,jsrender.rjs中的代码是:

page<<"alert('this works!');"

这是为什么?我在参数中看到没有authenticity_token,但我也尝试过传递authenticity_token,结果相同。

提前致谢。

【问题讨论】:

  • 一个快速更新,只是为了咯咯笑,我将 jsrender 方法更改为: def jsrender redirect_to "google.com" 结束日志文件显示“重定向到 google.com”,但该站点没有重定向。
  • 应该是这样。如果您想通过 AJAX 请求进行重定向,您应该执行 page.redirect_to 'www.google.com'
  • 不是 jQuery 专家,但我认为在 $.ajax 调用中你需要告诉它如何处理响应,基本上是评估响应。

标签: jquery ruby-on-rails ajax rjs


【解决方案1】:

从我在这里看到的,您的请求正在服务器上处理,并且正在返回响应,但是如果您希望它被处理/评估,您必须在 $.ajax 调用中添加一个回调函数,在你告诉它如何处理响应。

$.ajax({
  type: 'GET',
  url: '/jsrender',
  data: "id=" + $.fragment().nav.replace("_link", ""),
  success: function(response) {
    eval(response);
  }
});

您可以找到 jQuery 的 $.ajax 调用 here 的所有可用参数。

我还建议使用Firebug(或等效的,如果您不使用 Firefox)来调试您的 ajax 请求。
它有一个控制台选项卡,您可以在其中查看发出的每个 XHR 请求、请求/响应标头是什么、发布的数据和响应状态代码。

此外,无需发送authenticity_token,因为您正在发送GET,并且仅在非 GET 请求时才需要令牌。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 2017-04-12
    • 2020-07-14
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    相关资源
    最近更新 更多