Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как правильно обработать ajax запрос ? (https://javascript.ru/forum/misc/47343-kak-pravilno-obrabotat-ajax-zapros.html)

enot 19.05.2014 20:16

Как правильно обработать ajax запрос ?
 
Пытаюсь протестировать вариант возникновения ошибки на сервере при отправке ajax запроса

собственно сам запрос:

$.ajax({
            url  : this.opt.saveAllUrl,
            type : 'POST',
            data : data,
            success : function (response) {
                var data = $.parseJSON(response);
                alert('success');
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert(xhr.status);
                alert(thrownError);
                //that.errorCommentHandler();
            }
        }).fail(function() {
            alert( "error" );
        });


на сервере формирую ответ:

$response = array('error' => true, 'message' => 'some message', 'trace' => 'trace');
json_encode($response);

но как бы я не старался, не error() ни fail() в js не вызываются, как правильно сформировать ответ чтобы попать в метод fail()
или как обработать ответ на стороне клиента если 'error' => true ?

Erolast 19.05.2014 21:16

А, собственно, с чего тут должна произойти ошибка? response - это обычная строка. Ты представляешь в PHP ассоциативный массив в виде JSON-строки, передаешь эту строку браузеру, браузер в функции success преобразует JSON-строку в javascript-объект и выдает success. То есть, передавая response, ты ничем не управляешь, ты просто передаешь response. Это обычный текст, который затем можно обработать каким угодно образом, не более того.

Если хочешь, чтобы скрипт на стороне браузера кинул ошибку при том условии, что свойство error объекта, полученного разбором JSON-строки response равно true - так и делай.
success: function (response) {
  var data = $.parseJSON(response);
  if (data.error)
    throw new Error(data.message);
}


Часовой пояс GMT +3, время: 07:10.