如何在服务器响应为true或false时检查ajax成功?

时间:2015-06-14 05:23:10

标签: jquery ajax

我的服务器响应为truefalse。我一直试图找出如何使用以下脚本检查success返回的值是true还是false

$('form[data-async]').on('submit', function(event) {
var $form = $(this);
var $target = $($form.attr('data-target'));

$("input#login").val('Connexion...');

$.ajax({
    type: $form.attr('method'),
    url: $form.attr('action'),
    data: $form.serialize(),
    cache: false,

    success: function(data) {
        if (data == true) {
            alert('success :  user logged in');
        } else {
            alert('Erreur login');
        }
    },
    error: function(){
        alert("failure");
    }
});

event.preventDefault();
});

我一直在为data == 'true' & data == 1之类的数据尝试所有可能的值,但仍无效。有什么好主意吗? 这是被调用的函数:

        function login ($username, $password){
        if (!isset($_SESSION['vivvo'])){
            $_SESSION['vivvo'] = array();
        }
        if (isset($_SESSION['vivvo']['login_fail_time']) && ($_SESSION['vivvo']['login_fail_time'] < (VIVVO_START_TIME - 60*60))){
            $_SESSION['vivvo']['login_fail'] = 0;
            $_SESSION['vivvo']['login_fail_time'] = 0;
        }

        if ($_SESSION['vivvo']['login_fail'] >= 3){
            $this->set_error_code(2751);
            return false;
        }

        $user_list = $this->get_user_list(null);
        $user = $user_list->get_user_data($username, $password);
        if ($user == false){
            $_SESSION['vivvo']['login_fail'] = $_SESSION['vivvo']['login_fail'] + 1;
            $_SESSION['vivvo']['login_fail_time'] = time();
            if ($_SESSION['vivvo']['login_fail'] >= 3){
                $this->set_error_code(2751);
            }elseif ($_SESSION['vivvo']['login_fail'] >= 2){
                $this->set_error_code(2752);
            }else{
                $this->set_error_code(2753);
            }
            return false;
        }else{
            if ($user->get_activated() == '1'){
                $sm =& vivvo_lite_site::get_instance();
                $sm->user = $user;
                $sm->user->set_privileges();
                if (!isset($_SESSION['vivvo'])){
                    $_SESSION['vivvo'] = array();
                }
                $_SESSION['vivvo']['user_id'] = $sm->user->get_id();
                $_SESSION['vivvo']['user_domain'] = VIVVO_USER_SOURCE;
                $_SESSION['vivvo']['login_fail'] = 0;
                $_SESSION['vivvo']['login_fail_time'] = 0;
                session_regenerate_id();
                return true;
            }else{
                $this->set_error_code(2754);
                return false;
            }
        }
    }

2 个答案:

答案 0 :(得分:2)

请注意,在success事件中,data参数通常以JSON格式表示请求响应中的元素。因此,在响应中,使用带有returnValuetrue值的false参数设置JSON对象。然后,您可以通过data.returnValue访问此值。

此外,请注意您可以使用以下命令查看变量data中的内容:console.log(JSON.stringify(data)); data的内容将打印在调试终端中。如果您希望查看值为data的提醒,请使用以下命令alert(JSON.stringify(data));

在服务器端功能中,它应使用以下过程返回truefalse

funtion yourfunction() {

    ....

    $data = array( 'returnValue' => 'true');
    echo json_encode($data);
}

注意您创建了一个包含要返回的数据的Map,然后以JSON形式回显。然后,在访问data事件中的success对象时,请执行console.log(JSON.stringify(data));alert(JSON.stringify(data));

答案 1 :(得分:1)

您的dataType请求中缺少AJAX属性。包括它

$.ajax({
    type: $form.attr('method'),
    url: $form.attr('action'),
    data: $form.serialize(),
    dataType : 'html', //set the dataType attribute
    cache: false,

    success: function(data) {
        console.log(data); //Try to log the data and check the response
        if (data == true) {
            alert('success :  user logged in');
        } else {
            alert('Erreur login');
        }
    },
    error: function(){
        alert("failure");
    }
});

然后尝试在console.log(data)函数中success查看您从服务器接收到的确切内容。