【问题标题】:How to handle two separate responses from the server to a JQuery AJAX request?如何处理服务器对 JQuery AJAX 请求的两个单独响应?
【发布时间】:2018-11-22 18:27:18
【问题描述】:

我需要使用 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 请求在前端和后端似乎也效率低下。

【问题讨论】:

  • 大多数数据库写入速度非常快。在写入 db 之前,您是否有一些较长的进程正在运行?
  • 在您发送响应后,您通常无法发送另一个响应,但是您可以通过套接字向客户端发送broadcast 某些内容。但是,它们可能很难正确设置
  • 你能不能等到写完后再发送响应?
  • 您可以通过套接字向任一方向发送短消息,laravel 对此进行了很好的设置,我强烈建议您查看 laracasts 上的相关视频。
  • 你过得怎么样???

标签: javascript php jquery ajax laravel


【解决方案1】:

嗯.....你可以用两种方法来做到这一点。

1.拆分过程。

我的意思是先询问数据。如果错误,显示错误。如果写入数据请求成功,则得到响应如果错误显示错误。

2。两次操作后发送响应

先读数据,再写数据。发送您的回复,例如,

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

【讨论】:

    【解决方案2】:

    您可以做的是,在保存数据的控制器动作中,使用 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),它会从服务器端捕获错误。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 2014-12-18
      • 2015-07-23
      • 2023-03-30
      • 2015-04-14
      相关资源
      最近更新 更多