json_encode返回200并且未定义

时间:2016-05-19 16:12:26

标签: php jquery json ajax wordpress

我想要在数据库书签中添加或删除代码。 代码已经准备就绪,它可以正确地添加和删除数据库书签,但是当我调用该函数时,即使代码正常工作,它仍然会返回json error而不是json success

我想知道代码有什么问题(我从其他地方得到并适应),因为客户端没有收到正确的值true或{{1} },它只触发falsejson beforeSending

服务器端:

json error

客户方:

if($isFavorite) {
    // if it's favorite, remove from bookmarks
    return json_encode(array("status" => true, "added" => false));
} else {
    // if it's not favorite, include into bookmarks
    return json_encode(array("status" => false, "added" => true));
}

<script> function addItemToUsersList(userId, type, itemId) { jQuery.ajax({ 'url': 'xxx', 'type': 'GET', 'dataType': 'json', 'data': {userid: userId, type: type, itemid: itemId}, 'success': function(data) { console.log('json success'); }, 'beforeSend': function() { console.log('json beforeSending'); }, 'error': function(data) { console.log('json error'); console.log(data.status + ' ' + data.added); } }); } </script> 行记录console.log(data.status + ' ' + data.added);

如何为200 undefinedtrue返回正确的值false"status"

编辑: "added"永远不会登录到控制台,因此我不知道服务器端发生了什么。我需要知道这一点,因为我需要更改一个元素的类来显示一个空的或黄色的星。

1 个答案:

答案 0 :(得分:4)

如果您return结果并且没有在其他地方做任何回复,那么您将无法得到对您的ajax调用的任何回复,因此它是undefined。正如@MikeC所说,你必须在某个时候echo

如果您还没有在其他地方回复,请尝试:

$response = array(
    'status' => $isFavourite,
    'added' => !$isFavourite
);
echo json_encode($response);

我的建议是,如果'status'和'added'每次都是相反的,那么你可能只需要自己发送'status'。在你的JS中,如果你想知道added的值是什么,你可以检查'status'并反转我在上面做的布尔值。

 var added = !data.status;

<强>更新

如果您的ajax请求回到error函数,请求本身可能会失败。

将错误功能更改为此,以调试发生的事情:

'error': function(jqXHR, status, error) {
    console.log(status);
    console.log(error);
}

您可能在某处遇到服务器端代码错误,或者您正在调用错误的PHP脚本?