2017-02-16 3 views
0

Я уверен, что я что-то очень и очень просто здесь не хватает ...Rails возвращается код состояния для Ajax возвращения неопределенными

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 не возвращающей status: 200response.status?

+0

Возможный дубликат: http://stackoverflow.com/questions/5344145/how-to-get-response-status-code-from-jquery-ajax –

ответ

0

EDIT2:

На самом деле, для функции .always, если ответ будет успешным, аргументы (data, textStatus, jqXHR), но если это провал, это (jqXHR, textStatus, errorThrown).

В Документах, он сказал так:

jqXHR.always(function(data|jqXHR, textStatus, jqXHR|errorThrown) { }) 

jQuery Docs

Таким образом, вы должны были бы в if/else для отображения jqXHR.status в всегда для всех ответов.

EDIT:

Ваш 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); 
    }) 

И это будет печатать статус в журнале.

+0

Вы можете объяснить это мне немного больше? «всегда» необходимо? я подумал, что, читая журналы, «ответа» должно быть достаточно, поэтому я смущен, почему он НЕ работает – james

Смежные вопросы