簡體   English   中英

Laravel,jQuery Ajax返回響應400錯誤

[英]Laravel, return response 400 error with jquery ajax

我幾個月前使用Laravel 4.1構建了一個Web系統,在我的請求中,我使用了Response :: json();。 將數據返回到jquery ajax。

  • 200返回一個成功,並被ajax的.done()捕獲。
  • 400返回失敗/錯誤,並被ajax的.fail()捕獲。

而且效果很好!

現在的問題是,我正在使用Laravel 4.2構建另一個Web系統,並且使用相同的錯誤代碼200和400 ... 200可以正常工作,但400不能正常工作,因為例如:

拉拉韋爾

<?php

    public function example()
    {
        if (Input::get('param1') === 'value1') {
            return Response::json(array(
                'msg' => 'Correct!' 
            ), 200);
        }

        return Response::json(array(
            'msg' => 'Incorrect!'
        ), 400);
    }
?>

jQuery (我使用的是相同的jquery版本:1.10.2)

$.ajax({
    url: 'example',
    type: 'post',
    dataType: 'json',
    data: {param1: 'value1'},
})
.done(function(data) {
    console.log(data.msg);
})
.fail(function(data) {
    console.log(data.msg);
})
.always(function() {
    console.log("complete");
});

兩種情況下,請求都正確返回json,但是...

當為Correct / 200時,ajax的.done()在控制台中正確顯示該消息,但如果為Incorrect / 400,則ajax的.fail()不顯示該消息,而是顯示未定義,並且我不知道發生了什么。

我希望你能幫助我。

解決了

檢查我的自我答案。

解決了

我可以使用以下命令接收到json失敗:

fail(function(jqXHR)) {
      console.log(jqXHR.responseJSON.msg);
}

並正常工作!

我認為您的問題是,根據jQuery文檔 ,您的數據實際上沒有發送到fail函數:

jqXHR.fail(function(jqXHR,textStatus,errorThrown){}); 錯誤回調選項的替代構造。.fail()方法替換了不建議使用的.error()方法。 有關實現的詳細信息,請參考deferred.fail()。

另請參閱此問題

如果您想解決這個問題,並且仍然能夠在發生故障的情況下將一些數據發送回客戶端,一種解決方法是始終返回200響應,但包含一個'success'參數來指示操作是否已成功完成或不,只是處理一切內部done回調。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM