过滤从 Ajax 返回的数据 + 使用返回数据重定向


Filter returned data from Ajax + Redirect with return data

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

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 成功方法通过数据参数接收。

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

做一点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/