如何处理服务器对JQuery AJAX请求的两个单独响应?

时间:2018-11-22 18:27:19

标签: javascript php jquery ajax laravel

我需要使用AJAX在一次操作中从服务器读取和写入一些数据。我不希望写入阻止读取,因此,当然可以在服务器上先读取并使用该数据进行响应,但是然后如何警告前端写入错误?

前端是Javascript和JQuery,后端是PHP-或确切地说是Laravel(我认为这个问题与语言无关)。

我的标准JQuery AJAX请求:

    $.ajax({
    type: 'POST',
    url: 'savedata',
    dataType: 'json',
    data: { data_to_save: JSON.stringify(mydata) }, // JSON encoded data
    success: function (data_from_server)
        {
        // Update UI with data_from_server
        },
    error: function (data)
        {
        console.log('Error:', data.responseText);
        }
    });

}

服务器端(伪代码):

1. Read requested data from database (using a key in the POST params)
2. Reply to front end with requested data
3. Write data_to_save to the database
4. If there was an error in saving, how to notify the frontend as response has already been sent?

或者我可以在前端执行两个单独的AJAX请求,一个进行读取,一个进行写入,但是我只是在代码中一个接一个地列出它们,还是只在成功的代码块中触发第二个首先? 在前端和后端,两个AJAX请求似乎效率也低得多。

2 个答案:

答案 0 :(得分:0)

好吧.....您可以用两种方法做到这一点。

1。拆分过程。

我的意思是首先要求数据。如果有错误,请显示错误。如果成功请求写入数据,则获得响应;如果错误显示错误。

2。两次操作后发送响应

先读取数据,然后写入数据。像这样发送您的回复

{
"read":{
  "status":1
},
"write":{
  "status":0,
  "error":"the error message"
}
}

答案 1 :(得分:0)

您可以做的是,在保存数据的控制器操作中,使用try catch块。

PHP文件

try
{
    save_data()
}
catch(Exception $e)
{
    return response->json(['message' => $e->getMessage() ], 500);
}

500表示服务器错误状态。您可以自己定义它,也可以从Exception对象获取它。使用try catch块可确保ajax调用知道发生了成功/错误。

JS文件

在ajax的错误功能中,您可以添加data参数和console.log(data),它将从服务器端捕获错误。

祝你好运!