我有一些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);
}
但是如何在我的jQuery JavaScript中显示“not_logged_in”以便我知道它返回的位是什么?如果不是,我如何才能使该错误回到jQuery?
谢谢!
答案 0 :(得分:7)
不要在json_encode()方法中回显$ error,只需回显$ error就像这样。另外,不要使用变量json,使用变量数据。编辑后的代码:
if ( empty ( $member_id ) || !isset ( $member_id ) )
{
error_log ( ".......error validating the problem - no member id");
$error = "not_logged_in";
echo $error;
}
$('.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;
});
答案 1 :(得分:2)
当响应状态为.success(...)
时,jQuery使用200
方法(OK)任何其他状态(如404
或500
)都被视为错误,因此jQuery将使用{{ 1}}。
答案 2 :(得分:1)
您必须在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);
}
//