2014-09-20 3 views
0

У меня есть веб-приложение, которое вызывает PHP таким образом:Что лучше всего подходит для отправки ответа ajax?

var jqxhr = 
     $.getJSON(url) 
     .done(function(data, status) { 
      if(status == 'success') { 
       rv = true; 
       // initialise the user object 
       app.user = new User(data); 

       // post login-processing 
       app.postLogin(); 
      } else { 
       // login failed 
       console.log("autologin failed!"); 
      } 
     }) 
     .fail(function() { 
      console.log("autologin fail"); 
    }); // end var jqxhr = 

и мне интересно, что принимается в качестве наилучшей практики в сценарии PHP?

Например, если все работает хорошо, мой PHP возвращает:

header('Content-type: application/json; charset=utf-8'); 
print json_encode($row); 

Если есть неожиданная ошибка, например, плохой SQL, мой PHP возвращает:

header('HTTP/1.1 500 Internal Server Error'); 
header('Content-Type: application/json; charset=UTF-8'); 
etc. 

перед вызовом умереть (). Затем я обрабатываю это в .fail().

Но что, если я хочу вернуть ОЖИДАЕМУЮ ошибку, например «Неверное имя пользователя или пароль»? Можно ли использовать «Внутреннюю ошибку сервера», или я должен использовать какой-то протокол ответа json, чтобы сообщить об ошибке javascript и искать его в .done()?

Любой совет, который очень ценится.

Благодаря

Mini

+1

Состояние скважины 500 обычно означает, что на сервере произошло что-то плохое. Существуют более значимые [** коды состояния **] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html), например, вы можете использовать 401, поскольку это неавторизованный код состояния, который указывает на запрос на то, что требует аутентификации или аутентификации, не удался –

+0

«Недопустимое имя пользователя или пароль» не является внутренней ошибкой сервера, поэтому ** Нет **. – Bergi

ответ

0

Я думаю, вы должны проверить ответ заголовка из серверного сценария и использовать кожух переключателя, соответственно. Например: - если ответ заголовка - json, то используйте другой случай, если ответ заголовка не был вызван ajax-вызовом, а затем используйте другой случай.

Смежные вопросы