我正在尝试将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
答案 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.erb
。 dataType: "json"
无效,我并不感到惊讶。但是如果你实际上返回了有效的json,它应该可以工作。但是你的rails日志告诉我们你可能正在返回html。
答案 4 :(得分:0)
我遇到了同样的问题,我在关闭成功函数后通过添加一个冒号解决了这个问题。