Магистраль — как наша модель узнает, отправляет ли сервер сообщение об ошибке с помощью PHP

У меня есть модель, имеющая свойство URL. Когда я сохраняю модель методом «Сохранить», она отправляет запрос на сервер. Если связь прошла успешно, срабатывает метод success(), а если связь не удалась, срабатывает функция «ошибка». Но что, если нет проблем со связью, но когда сервер отправляет «сообщение о сбое» из-за некоторых проверок сервера или по другим причинам? Поскольку из-за проверки на стороне сервера (или других) модель не сохраняется на сервере. Таким образом, это не должно быть сохранено и в базовой модели. Что мне делать, чтобы модель не сохранялась, когда сервер отправляет «Ошибка обновления базы данных», и чтобы она сохранялась, когда я получаю «Успешно обновлено». Я отправляю следующий ответ с сервера:

    $this->response(
        array(
             'model'=>$model,
             'status'=>$status,
             'metamodel'=>array(),
             'message'=>$msg  (either success or fail)(my custom message)
            )
          ); 

на стороне клиента я сохраняю вот так.

        model.save(attr{
          success:(model,res)->
            // to do when communication success
          error:(model,res)->
            //to do when communication fails
         })

Итак, как я могу проверить на основе сообщения или статуса, удалось ли серверу или нет? И как я могу заставить модель не сохранять или отменять изменения, когда сервер говорит «нет» (НЕ ВНУТРЕННЯЯ ОШИБКА СЕРВЕРА, моя пользовательская ошибка из-за проверок или по другим причинам)

Кроме того, как я могу использовать метод Backbone.Sync (пожалуйста, практический пример, связанный с моим кодом) и что он делает? (пожалуйста, четко укажите, является ли проблема с коммуникацией или пользовательским сообщением об ошибке или внутренней ошибкой сервера)

Я могу получить доступ к «статусу» и «сообщению» в методе «успех», но как я могу использовать их для отмены изменений в модели. Спасибо


person user1305989    schedule 03.04.2012    source источник
comment
Если ваш сервер настроен на обработку запросов REST, вам не нужно менять метод синхронизации магистрали. Он должен работать из коробки. Чтобы обрабатывать ошибки, вы должны отправить правильный HTTP-код при ошибке вместо стандартного 200. Если вы это сделаете, он должен вызвать обработчик ошибок. Я никогда не использовал CodeIgniter, но я уверен, что есть способ изменить код http в ответе.   -  person Gohn67    schedule 03.04.2012
comment
как я могу отправить HTTP-код при ошибке? Вы имеете в виду сообщение о состоянии?   -  person user1305989    schedule 03.04.2012
comment
Вот ссылка на то, что говорится в руководстве Backbone: documentcloud.github.com/backbone/#Model -сохранить. Прочитайте часть о сохранении. В нем говорится, что нужно вернуть код ответа HTTP, отличный от 200, для вызова кода ошибки.   -  person Gohn67    schedule 03.04.2012
comment
Опять же, я никогда не использовал CodeIgniter, но просматривая их руководство, вы можете установить ответ HTTP, используя $this-›output-›set_status_header(code, 'text'); codeigniter.com/user_guide/libraries/output.html   -  person Gohn67    schedule 03.04.2012
comment
да, я хочу использовать ожидание: правда, это означает, что я хочу дождаться подтверждения сервером, прежде чем вносить изменения в модель во внешнем интерфейсе, но как я могу реализовать это, не могли бы вы сказать мне?   -  person user1305989    schedule 03.04.2012
comment
К сожалению, сейчас у меня нет времени на полный ответ. Я тоже не знаю точного ответа. Я могу попробовать позже сегодня вечером, но, надеюсь, кто-то ответит на ваш вопрос к тому времени. Извиняюсь.   -  person Gohn67    schedule 03.04.2012
comment
Хорошо, спасибо за помощь !   -  person user1305989    schedule 03.04.2012


Ответы (1)


Перезапишите метод parse(response) в модели и проверьте наличие флага ошибки. http://documentcloud.github.com/backbone/#Model-parse

person ecocuba    schedule 20.04.2012