Подтвердить что ты не робот

Управление ответной ошибкой сервера с помощью магистрали

Я хотел бы знать, как наилучшим образом управлять ответом на сервер, для новых, обновлять или удалять модели. В настоящий момент сервер возвращает код состояния http # 400. Но обработчик ошибок по умолчанию в Backbone не показывает ошибки.

Как я могу показать эти ошибки?

Хорошо ли, что сервер возвращает заголовки HTTP-ошибок, когда проверка на стороне сервера завершается с ошибкой? (Возможно, лучше вернуть ответ успеха с сообщением status = 'ERROR')

4b9b3361

Ответ 1

Если вы возвращаете статус http, отличный от 2XX, вы уже на полпути выполняете задание.:-) В принципе, что вы можете сделать, это отправить обратно все, что вы хотите назад в качестве ответа.

Например, вы можете просто отправить что-то вроде этого:

// Send back http status 500
echo 'Could not save, server error';

Состояние 500 вызовет обратный вызов ошибки Backbone, и ваш ответ будет объектом jqXHR. В приведенном выше примере вы можете получить сообщение, выполнив что-то подобное в обратном вызове.

model.save({},{
    error: function(model, response) {
        console.log(response.responseText);
    }
});

Это самый простой способ вернуть некоторые данные/сообщение об ошибке, возникшей на стороне сервера. Вы можете, конечно, создать более сложные данные, которые будут возвращены с сервера:

// I'm using SLIM RESTful framework...
$dataOut = array('error'=>'Validation type', 'message'=>'Did not validate');
$response->body(json_encode($dataOut));

Таким же образом вы можете получить доступ к этому ответу так:

model.save({},{
    error: function(model, response) {
        var responseObj = $.parseJSON(response.responseText);
        console.log('Type: ' + responseObj.error + ' Message: ' + responseObj.message);
    }
});

Или что-то в этом роде.

Поскольку ответ, переданный в ваш обратный вызов, является объектом jqXHR, у вас есть полный доступ ко всем его свойствам, которые вы можете использовать:

E.g.
response.readyState
response.status
response.statusText // etc.

Магистралу требуется только статус http, возвращенный с сервера, чтобы выполнить свою задачу.