我确信我在这里错过了一些非常简单的事情......
JQUERY CODE
$.ajax({
type : "POST",
url : '/orders/create_or_update',
dataType: 'json',
contentType: 'application/json',
data : JSON.stringify(params)
})
.done(function(response){
console.log(response.status)
console.log(response)
})
CONTROLLER CODE
def create_or_update
...
render json: {"name" => "test"}, status: 200
end
OUTPUT OF CONSOLE.LOG
undefined
Object: {name: "test"}
为什么我的jQuery中的response.status
没有返回status: 200
?
答案 0 :(得分:0)
<强> EDIT2:强>
实际上,对于.always
函数,如果响应成功,则参数为(data, textStatus, jqXHR)
,但如果失败,则为(jqXHR, textStatus, errorThrown)
。
在文档中,它是这样说的:
jqXHR.always(function( data|jqXHR, textStatus, jqXHR|errorThrown ) { })
因此,您需要if/else
在所有回复中始终显示jqXHR.status
。
修改强>
您的response
只是您从render
来电回来的对象。它没有任何地位概念。这就是为什么当你.status
时它未定义。我认为.always
是必要的b / c它将涵盖来自控制器的.done
和.fail
响应。如果你只是要获得.done
方法,并且你希望它能够处理它,你可以这样做(注意额外的textStatus
参数):
$.ajax({
type : "POST",
url : '/orders/create_or_update',
dataType: 'json',
contentType: 'application/json',
data : JSON.stringify(params)
})
.done(function(response, textStatus, xhr){
console.log(xhr.status)
console.log(response)
})
所以,你应该能够做到这一点:
$.ajax({
type : "POST",
url : '/orders/create_or_update',
dataType: 'json',
contentType: 'application/json',
data : JSON.stringify(params)
})
.done(function(response){
console.log(response.status)
console.log(response)
}).always(function(a, textStatus, b){
console.log(a.status); // One of these two will be `undefined`
console.log(b.status);
})
这会将状态打印到日志中。