2017-02-22 8 views
3

Я делаю некоторые Аякса первый раз ... Код:Ошибка консоли присутствует даже в случае сбоя?

JQuery

form_ajax_promise = $.ajax({ 
    type : "POST", 
    url : '/orders/create_or_update', 
    dataType: 'json', 
    contentType: 'application/json', 
    data : JSON.stringify(params) 
}) 
form_ajax_promise.then(
    function(response) { 
    formSuccess(response) 
    }, 
    function(response) { 
    formFailure(response) 
    } 
) 

контроллер

def create_or_update 
    if @object.save 
    # corresponds with formSuccess 
    render json: {"id" => @order.id}, status: 200 
    else 
    # corresponds with formFailure 
    render json: {"errors"=> @order.errors.full_messages}, status: 400 
    end 
end 

success путь хорошо работает. При тестировании failure маршрута, при условии, что formFailure это простая функция ...

function formFailure(response){ 
    console.log("successfully inside of formFailure") 
} 

То, что я заметил, что происходит в том, что console показывает соответствующее сообщение журнала, как указано выше, но и показывает мне ошибку:

Failed to load resource: the server responded with a status of 400 (Bad Request) 

Произошла ли эта ошибка? Я чувствовал, что, поскольку я представил адекватный fail в $.then, он не должен?

EDIT

Извиняюсь за сумбур, это не тот случай, Multiple Render/перенаправлять, я просто лениться и вырезания другой код, так как я только пытался описать провал поведение , Виноват. Код редактируется выше.

+0

Вы делаете рендер с 'статусом: 400', так что это правильное поведение. – Sajan

+0

Два вопроса (1) Какая версия jQuery? (2) Обработан ли 'form_ajax_promise' дальше? –

+0

1) jQuery 2.2.4, 2) не обрабатывается дальше – james

ответ

1

Возможно, что-то подобное сделают. Это вернет вам success когда @order сохранена успешно и error когда @order недействителен

def create_or_update 
    # Your code here to create or update @order 
    if @order.save 
    # corresponds with formSuccess 
    render json: {"id" => @order.id}, status: 200 
    else 
    # corresponds with formFailure 
    render json: {"errors"=> @order.errors.full_messages}, status: 400 
    end 
end 
+0

жаль, что я просто сократил код и был ленив, это то, что происходит – james

0

Как правило, этот вид результатов коды в Multiple Render или перенаправлять ошибки. Вы не используете несколько рендерингов или переадресаций в одной и той же функции без использования условного/ветвящегося оператора, например, если или используете операторы return.

В вашем случае,

render json: {"errors"=> @order.errors.full_messages}, status: 400

является оказаны, которая направляет браузер, который получил код ошибки 400 (который для плохой запросу), так что вы видите эту ошибку в консоли. Код более эффективного использования, которым поделился @Deepak Mahakale.

Надеюсь, что это поможет

+0

извините, посмотрите комментарий/править – james

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