Условные операторы, основанные на ответе 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');
                       }
            }
Author: input, 2011-05-05

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);
}
?>

Я думаю, что это довольно понятно, но если у вас есть какие-либо дополнительные вопросы, не стесняйтесь задавать.

 3
Author: AJ., 2011-05-05 01:46:57

Конечно, чтобы заставить решение 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

Надеюсь, это поможет:)

 0
Author: munti, 2011-05-04 21:06:17

Спасибо за ваши полезные ответы. Я решил это с помощью 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);
    }
 0
Author: input, 2011-05-04 22:44:08