使用返回数据从Ajax + Redirect过滤返回的数据

时间:2014-12-29 00:38:43

标签: php ajax

我有一个验证,当成功创建一个会话变量时:

if( password_verify($password, $artist_password) ) { // if this is true
            // create $_SESSION artist name
            $_SESSION['artist_name'] = $artist_name;
            return $artist_name;
        } else {
            echo "Incorrect Password";
        }

此验证由Ajax请求启动。

如果验证有错误,我会回复一条消息。 Ajax成功方法通过data参数接收此回显消息。

$.ajax({
    url: '../includes/login_validation.php',
    type: 'post',
    data: inputs,
    success: function(data){ 
        $("span#error_msg").html(data);
    }, 
    // returns 'Incorrect Password'

我的问题是从PHP文件定义返回响应。

例如,当出现错误时,PHP脚本会回显一条消息,然后通过Ajax成功方法接收并处理此响应,并将其放入html占位符。

但是,如果分配了SESSION变量,我想返回该数据并将其包含在重定向中。

我的问题是,如何识别作为返回值的回显响应和包含其他数据的返回值(例如$ _SESSION [' artist_name'])。

如果成功,我如何将其包含在我的重定向中,以便重定向的页面可以访问会话变量。

window.location.href="artistWorkshop.php"; // plus session variable

1 个答案:

答案 0 :(得分:0)

如何进行一些JSON格式化:

if( password_verify($password, $artist_password) ) { // if this is true
    // create $_SESSION artist name
    $_SESSION['artist_name'] = $artist_name;
    echo '{"status":"success","result":"'.$artist_name.'"}';
} else {
    echo '{"status":"error","result":"Incorrect Password"}';
}

接下来,处理JS中的输出:

$.ajax({
    url: '../includes/login_validation.php',
    type: 'post',
    data: inputs,
    success: function(data){ 
        var obj = JSON.parse(data);
        if (obj.status == 'success') {
            // redirect
            window.location.href="artistWorkshop.php?artist="+obj.result;
        }
        if (obj.status == 'error') {
            // throe error
            $("span#error_msg").html(obj.result);
        }
    },
}); 

您可以通过这种方式处理多种格式。问题是JS正在将任何输出解释为成功,因为AJAX调用本身是成功的。现在,您有一条消息来确定请求的实际结果。在您的代码中,要确定ajax请求的实际失败,您需要包含error节点:

$.ajax({
    url: '../includes/login_validation.php',
    type: 'post',
    data: inputs,
    success: function(data){ 
        $("span#error_msg").html(data);
    },
    error: function(data){
        // handle the error
    }, 

如果你走那条路,请看看:

http://api.jquery.com/jquery.ajax/