Условные операторы, основанные на ответе PHP через jQuery
Моя форма возвращает данные из PHP через jQuery. Как я могу создавать условные операторы на основе ответа в jQuery.
Это jQuery:
$.ajax({
type: "POST",
url: "createAlbum.php",
data: postData,
success: function(data){
$('#message').fadeIn();
$('#message').html(data);
}
});
Это то, что он возвращает из PHP:
if($error) {
echo $error;
}
else {
echo $success;
}
Поэтому, если ответ будет успешным, сообщение должно скрыться через несколько секунд, но если это ошибка, оно должно подождать, пока пользователь ее исправит. Что-то вроде этого:
success: function(data){
$('#message').fadeIn();
$('#message').html(data);
if (data.response == 'success') {
alert('Success');
setTimeout(function() {
$('#message').fadeOut();
}, 5000 );
} else if (data.response == 'error') {
alert('Error');
}
}
3 answers
Почему бы вам не использовать настройку statusCode
для вашего звонка в ajax()
и обладают еще более тонким контролем, чем просто "успех" и "ошибка"? Существует (или будет существовать) множество различных способов, которыми ваш сценарий может быть успешным или неудачным.
Код состояния (добавлен 1.5) Карта по умолчанию: {}
Карта числовых HTTP-кодов и функций, вызываемых, когда ответ содержит соответствующий код. Например, следующее предупредит когда статус ответа равен 404:
$.ajax({Код состояния:{ 404: функция() { предупреждение ("страница не найдена"); }}}); Если запрос выполнен успешно, код состояния функционирует используйте те же параметры, что и при успешном обратном вызове; если это приводит к ошибке, они принимают те же параметры , что и при обратном вызове ошибки.
ОБНОВЛЕНИЕ:
Я добавил пример того, как использовать StatusCode вместо настроек успеха и ошибок для ajax()
вызова в Jquery. Во-первых, тест Пользовательский интерфейс:
<html>
<head>
<title>jQuery Test Page</title>
<script type="text/javascript" src="jquery-1.6.js"></script>
<script type="text/javascript">
function displayMessage(message){
$('#message').fadeIn();
$('#message').html(message);
}
function successFunction(data){
displayMessage(data);
}
function notFoundFunction(){
displayMessage("Not Found!");
}
function errorFunction(){
displayMessage("An Error Occurred!");
}
function invokeAjax(test){
$.ajax({
type: "POST",
url: "test.php?test="+test,
//data: postData,
statusCode: {
200: successFunction,
404: notFoundFunction,
500: errorFunction,
}
});
}
</script>
</head>
<body>
<h1 id="message" style="display:none;"></h1>
<a href="javascript:invokeAjax('success');">Invoke Ajax - Success (200)</a><br>
<a href="javascript:invokeAjax('notfound');">Invoke Ajax - Not Found (404)</a><br>
<a href="javascript:invokeAjax('error');">Invoke Ajax - Error (500)</a><br>
</body>
</html>
А вот PHP-скрипт, вызываемый Ajax:
<?php
$test = $_GET['test'];
if($test == 'success'){
echo 'some meaningful data';
} else if($test == 'notfound') {
http_send_status(404);
} else if($test == 'error'){
http_send_status(500);
}
?>
Я думаю, что это довольно понятно, но если у вас есть какие-либо дополнительные вопросы, не стесняйтесь задавать.
Конечно, чтобы заставить решение AJ работать, вам нужно ответить с сервера клиенту с правильными заголовками - http://no.php.net/manual/en/function .header.php:
header('HTTP/1.1 404 Not Found');
Или
header('HTTP/1.1 500 Internal Server Error');
Вот список HTTP-кодов: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
Надеюсь, это поможет:)
Спасибо за ваши полезные ответы. Я решил это с помощью JSON, хотя!
PHP:
if($error) {
echo json_encode(array('success' => false, 'text' => $error));
}
else {
echo json_encode(array('success' => true, 'text' => $success));
}
JQuery:
if (data.success) {
alert('Success');
setTimeout(function() {
$('#message').fadeOut();
}, 5000 );
} else {
alert('Error ' + data.text);
}