基于PHP响应的条件语句通过jQuery

时间:2011-05-04 20:40:05

标签: php javascript jquery response

我的表单是通过jQuery从PHP返回数据。如何根据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 个答案:

答案 0 :(得分:3)

为什么不使用statusCode设置来调用ajax()并进行更细粒度的控制,而不仅仅是“成功”和“错误”?您的脚本可能(或将会)有许多不同的成功或失败方式。

  

statusCode(已添加1.5)地图默认值:{}

     

数字HTTP代码和地图   当函数被调用时   响应有相应的代码。   例如,以下内容将发出警报   当响应状态为404时:

     

$ .ajax({statusCode:{       404:function(){         警报('找不到页面');       如果请求成功,状态代码将起作用   采取相同的参数   成功回调;如果它导致了   错误,他们采取相同的参数   作为错误回调。


<强>更新

我添加了一个示例,说明如何在Jquery中使用statusCode而不是ajax()调用的成功和错误设置。首先,测试UI:

<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>

这是Ajax调用的PHP脚本:

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

我认为这是不言自明的,但如果您有任何其他问题,请不要犹豫。

答案 1 :(得分:0)

当然,要使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

希望这会有所帮助:)

答案 2 :(得分:0)

感谢您的有用答案。我用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);
    }