如何让PHP AJAX 错误显示在我的jQuery代码中?

t2a7ltrp  于 2023-02-18  发布在  PHP
关注(0)|答案(4)|浏览(107)

我有一些PHP AJAX代码,应该验证jQuery发送的一些参数并返回一些值。目前,它总是返回调用jQuery的错误情况,我不知道为什么。
下面是我的jQuery代码:

$('.vote_up').click(function() 
{        
    alert ( "test: " + $(this).attr("data-problem_id") );
    problem_id = $(this).attr("data-problem_id");

    var dataString = 'problem_id='+ problem_id + '&vote=+';

    $.ajax({
                type: "POST",
                url: "/problems/vote.php",
                dataType: "json",
                data: dataString,
                success: function(json)
                {           
                    // ? :)
                    alert (json);

                },
                error : function(json) 
                {
                alert("ajax error, json: " + json);

                //for (var i = 0, l = json.length; i < l; ++i) 
                    //{
                    //  alert (json[i]);
                    //}
                }
            });

    //Return false to prevent page navigation
    return false;
});

这是PHP代码,PHP中确实会出现验证错误,但我没有看到任何迹象表明在PHP端发生的错误是调用jQuery错误案例的错误。
下面是调用的代码段:

if ( empty ( $member_id ) || !isset ( $member_id ) )
{
    error_log ( ".......error validating the problem - no member id");
    $error = "not_logged_in";
    echo json_encode ($error);
}

但是我如何让"not_logged_in"显示在jQuery的JavaScript中,以便我知道它是返回的位?如果它不是,我如何使该错误是返回到jQuery的?
谢谢!

t3irkdon

t3irkdon1#

不要在json_encode()方法中回显$error,就像这样简单地回显$error。另外,不要使用变量json,使用变量data。

PHP语言

if ( empty ( $member_id ) || !isset ( $member_id ) )
{
    error_log ( ".......error validating the problem - no member id");
    $error = "not_logged_in";
    echo $error;
}

jQuery

$('.vote_up').click(function() 
{        
    alert ( "test: " + $(this).attr("data-problem_id") );
    problem_id = $(this).attr("data-problem_id");

    var dataString = 'problem_id='+ problem_id + '&vote=+';

    $.ajax({
                type: "POST",
                url: "/problems/vote.php",
                dataType: "json",
                data: dataString,
                success: function(data)
                {           
                    // ? :)
                    alert (data);

                },
                error : function(data) 
                {
                alert("ajax error, json: " + data);

                //for (var i = 0, l = json.length; i < l; ++i) 
                    //{
                    //  alert (json[i]);
                    //}
                }
            });

    //Return false to prevent page navigation
    return false;
});
yi0zb3m4

yi0zb3m42#

当响应状态为200(OK)时,jQuery使用.success(...)方法,任何其他状态(如404500)都被视为错误,因此jQuery将使用.error(...)

wwwo4jvm

wwwo4jvm3#

你必须在javascript的success处理程序中处理php脚本返回的所有输出,所以php中一个未登录的用户仍然可以(通常应该...)导致一个成功 AJAX 调用。
如果你总是在javascript调用中得到error处理程序,那么你的php脚本没有运行或者返回了一个真实的的错误而不是一个json对象。
根据manual,您在错误处理程序中有3个变量可用,因此只需检查这些变量就可以确切地告诉您问题是什么:

// success
success: function(data)
{
  if (data == 'not_logged_in') {
    // not logged in
  } else {
    // data contains some json object
  }
},
// ajax error
error: function(jqXHR, textStatus, errorThrown)
{
  console.log(jqXHR);
  console.log(textStatus);
  console.log(errorThrown);
}
//
ekqde3dh

ekqde3dh4#

在这种情况下,调试PHP最简单的方法是修改.htaccess以创建错误日志。
php_flag日志错误打开

相关问题