json_encode返回200和未定义

3
我想要一个代码可以添加或删除数据库书签。代码已经准备好了,它可以正确地添加和从数据库中删除书签,但是当我调用函数时,它总是返回json error而不是json success,即使代码起作用。
我想知道代码存在什么问题(我从其他地方获得并改编的代码),因为客户端未收到正确的值truefalse,它只触发了json beforeSendingjson 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 undefined

请问如何返回正确的值true或者false用于"status""added"?


编辑: json success 从未在控制台打印,所以我不知道服务器端发生了什么。我需要知道这个,因为我需要更改元素的类以显示空星或黄色星。


1
你确定你真的把输出发送到了客户端的某个地方吗? - t.niese
2
我已经有一段时间没有使用PHP了,但是你不应该使用echo json_encode(...)来输出JSON吗? - Mike Cluck
1
将它们作为整数发送,并在返回时进行处理。布尔值在发送时会出现问题。 - Nelson Teixeira
“json success” 从未在控制台上记录,因此我不知道服务器端发生了什么。我需要知道这一点,因为我需要更改元素的类以显示空星或黄色星。 - William
1个回答

4
如果你只是返回结果而没有在其他地方使用它,那么你将不会得到任何响应,所以它会变成未定义。正如@MikeC所说,你必须在某个时候使用echo输出它。
如果你还没有在其他地方使用echo输出它,请尝试:
$response = array(
    'status' => $isFavourite,
    'added' => !$isFavourite
);
echo json_encode($response);

我的建议是,如果“status”和“added”每次都是相反的,那么您可能只需要发送“status”。在您的JS中,您可以检查“status”并像我上面所做的那样反转布尔值,如果您想知道added的值。

 var added = !data.status;

更新

如果您的ajax请求返回到error函数,则该请求可能会失败。

将您的错误函数更改为以下内容,以调试发生了什么:

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

你可能在服务器端代码中有错误,或者可能调用了错误的PHP脚本?


1
@William 我明白,但你是否在 PHP 中的某个地方回显了 json_encode()?你知道仅使用 return json_encode() 无法将任何内容从服务器端发送回 JS 吗? - BadHorsie
由于您的最新更新,我收到了以下错误信息: parsererror SyntaxError: 在 JSON 的位置 0 处意外的 < 符号 - William
1
好的,这很可能意味着您的服务器由于某些错误而实际返回HTML,而不是像您想象的那样返回JSON。尝试在错误函数中添加console.log(jqXHR.responseText)并查看它的内容。仔细检查您的PHP脚本是否有错误(例如,尝试单独运行您的PHP脚本以检查其是否正常工作)。 - BadHorsie
好的,我会做到。在尝试JSON之前,我已经单独运行了PHP并且它可以正常工作。它将数据添加到MySQL表中,并在数据已存在时将其删除。我会在一分钟内发布结果。 - William
1
@William 好的,在你的 PHP 文件中 echo json_encode 的下一行,如果加上 die(); 会发生什么? - BadHorsie
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接