我需要使用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请求在前端和后端的效率似乎也要低得多。
嗯。。。。。你可以用两种方法来做。
1.拆分过程
我的意思是先询问数据。如果出现错误,则显示错误。如果成功请求写入数据,则获取响应如果错误显示错误。
2.两次操作后发送响应
首先读取数据,然后写入数据。发送您的回复,如
{
"read":{
"status":1
},
"write":{
"status":0,
"error":"the error message"
}
}
您可以做的是,在保存数据的控制器操作中,使用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)
,它将从服务器端捕获错误。
祝你好运!