Как обработать два отдельных ответа от сервера на запрос JQuery AJAX? - PullRequest
0 голосов
/ 22 ноября 2018

Мне нужно использовать 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);
        }
    });

}

Серверсторона (psuedocode):

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 голосов
/ 22 ноября 2018

Что вы можете сделать, так это в действии контроллера по сохранению данных использовать блок 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) будет перехватывать ошибку со стороны сервера.

Удачи!

0 голосов
/ 22 ноября 2018

Хорошо ..... Вы можете сделать это двумя способами.

1.Процесс расщепления.

Я имею в виду сначала спросить данные.Если ошибка, Показать ошибку.В случае успешного запроса на запись данных, получите ответ. Если ошибка показывает ошибку.

2.отправьте ответ после обеих операций

сначала прочитайте данные, затем запишите данные.Отправьте свой ответ как,

{
"read":{
  "status":1
},
"write":{
  "status":0,
  "error":"the error message"
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...