我使用的是RubyonRails 3.0.7和jQuery 1.6.1。我正试图使用jQuery $.ajax()
语法实现AJAX请求,但我在响应上遇到了问题,该响应总是由错误回调触发。
N。B.:路由器设置成功。
在控制器中我有:
def test_method
...
respond_to do |format|
format.js
end
end
请求的jQuery AJAX代码是:
$('#test_html_css_id').bind('click', function() {
$.ajax({
type: "POST",
url: "<%= user_url(@user)%>/test_method",
data: "test_data=<%= @user.test_data.to_s %>",
dataType: 'js',
error: function(jqXHR){
alert( "ERROR " + jqXHR );
},
success: function(jqXHR){
alert( "SUCCESS " + jqXHR );
}
});
});
在click
事件的上述示例中,它始终返回以下警报消息:
ERROR [object Object]
如何在控制器中显式返回成功或错误响应
BTW:如何从控制器返回一些数据,然后在jQuery代码中的触发器中处理这些数据
在@dgvid评论之后更新
在jQuery代码中使用此
error: function(xhr, status, ex) {
var msg = "";
if (xhr) {
msg = "readyState is " + xhr.readyState + ". ";
}
if (ex) {
msg += ex.name + ' - ' + ex.message;
}
alert("ERROR " + msg); },
我收到以下警报消息:
ERROR readyState is 4. SyntaxError - invalid label
这是什么意思
我如何才能明确返回成功或者我的控制器出现错误响应?
您可以使用HTTP状态代码来完成此操作,200表示成功,500表示服务器错误。所以试着使用一些代码,比如:
if @object
respond_to do |format|
format.js
end
else
render :nothing => true, :status => 500
end
带有消息"invalid label"的SyntaxError异常可能表明$.ajax方法试图将响应数据解析为JavaScript或JSON,但在响应中遇到了对该类型语法无效的内容。尝试将调用中的dataType字段更改为"text",只是暂时更改。看看这是否能让你超越这个错误,并让你看到你从服务器上实际得到的东西。
顺便说一下:
- jQuery.ajax的文档没有将"js"列为dataType的有效参数。您可能想要"script",或者"json"或"jsonp"
- 如果dataTypenot没有设置,并且我怀疑它是无效的,那么$.ajax会尝试从响应的MIME类型推断类型
编辑:我还应该提到——如果您运行的是Firebug或类似软件,请尝试使用Net选项卡检查服务器响应。给定响应的MIME类型,它在语法上有效吗?如果没有,则需要更正来自服务器的响应,更正响应上设置的MIME类型,或者更改$.ajax调用中的dataType。