AJAX成功函数未被调用

时间:2013-08-03 03:42:11

标签: javascript jquery ruby-on-rails ajax

我正在尝试将AJAX调用中的成功函数发送到fire。我知道它正常工作,因为我正在使用自己的API,我可以看到它正确地访问了URL,服务器正在输出HTTP 200.

我认为这是因为服务器正在输出json,所以我试图在AJAX调用中考虑到这一点,但仍然成功函数不起作用。这是我的代码

AJAX

$.ajax('http://localhost:3000/api/users/show/:id', {
  type: 'GET',
  dataType: 'json',
  contentType: "application/json",
  data: {
    id: 1
  },
  success: function(response) {
    return alert("Hey");
  }
});

api方法

class UsersController < ApplicationController
    respond_to :json

    def show
        respond_with User.find(params[:id])
    end

end

服务器日志

Started GET "/api/users/show/:id?id=1" for 127.0.0.1 at 2013-08-02 20:36:42 -0700
Processing by MainController#index as JSON
  Parameters: {"id"=>"1", "path"=>"api/users/show/:id", "main"=>{}}
  User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1  [["id", 1]]
  Rendered main/index.html.erb within layouts/application (0.6ms)
Completed 200 OK in 146ms (Views: 144.3ms | ActiveRecord: 0.5ms)
[2013-08-02 20:36:42] WARN  Could not determine content-length of response body. Set content-length of the response or set Response#chunked = true

5 个答案:

答案 0 :(得分:20)

这件事发生在我身上也很久了,我通过将dataType更改为文本并通过eval手动将其转换为json对象来解决这个问题。

$.ajax('http://localhost:3000/api/users/show/:id', {
  type: 'GET',
  dataType: 'text',
  contentType: "application/json",
  data: {
    id: 1
  },
  success: function(response) {
    response = eval(response);
    return alert("Hey");
  }
});

愿这对你有用。

答案 1 :(得分:5)

我会添加一个完整的函数并检查文本状态。这应该提供解决问题所需的信息。

complete: function(response, textStatus) {
    return alert("Hey: " + textStatus);
  }

答案 2 :(得分:2)

我认为问题是我一直在经历的问题,我想我有答案。看起来你的调用正在检索HTML视图,正如我在“布局/应用程序中的渲染主/ index.html.erb”中推断的那样,尽管我不熟悉你正在使用的任何API堆栈。

我在ASP.NET MVC 5上的症状是调用了complete,但没有调用错误,成功或超时。在响应对象上,状态为200,statusText为“OK”,但textStatus参数为“parsererror”。

responseText是我期待的html,但我忘记了我已经从检索json转移到html,所以在将数据类型:'json'更改为数据类型:'html'后,它现在可以正常工作。

答案 3 :(得分:0)

考虑到这个课程,它显然没有调用你期望的方法:

 class UsersController < ApplicationController

我们应该在您的日志中看到类似的内容:

Processing by UsersController#show as JSON

但是你的日志显示了这个:

Processing by MainController#index as JSON

我的猜测是你的路线错了。检查路由以及它没有调用UsersController#show方法的原因。还可以肯定的是,使用浏览器(chrome,firefox),你应该能够检查请求的响应,以确保它实际上是接收json或html。

因为它试图渲染main.html.erbdataType: "json"无效,我并不感到惊讶。但是如果你实际上返回了有效的json,它应该可以工作。但是你的rails日志告诉我们你可能正在返回html。

答案 4 :(得分:0)

我遇到了同样的问题,我在关闭成功函数后通过添加一个冒号解决了这个问题。