【问题标题】:json_encode returns 200 and undefinedjson_encode 返回 200 且未定义
【发布时间】:2016-09-16 15:52:10
【问题描述】:

我想要一个代码来添加或删除数据库书签。 代码已准备就绪,它可以正确地从数据库书签中添加和删除,但是当我调用该函数时,即使代码有效,它也会继续返回 json error 而不是 json success。

我想知道代码有什么问题(我从其他地方得到并适应)因为客户端没有收到正确的值true 或false,它只会触发json 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 undefined

如何为"status" 和"added" 返回正确的值true 或false?


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

【问题讨论】:

  • 你确定你真的把输出发送给客户端吗?
  • 我已经有一段时间没有使用 PHP 了,但你不应该回显 JSON 吗? echo json_encode(...).
  • 将它们作为整数发送并在返回时处理它们。发送布尔值是有问题的。
  • json success 从未登录控制台,所以我不知道服务器端发生了什么。我需要知道这一点,因为我需要更改元素的类以显示空星或黄色星。

标签: php jquery json ajax wordpress


【解决方案1】:

如果您是returning 结果并且没有对其他地方的返回做任何事情,您将不会得到任何对您的 ajax 调用的响应,所以它是undefined。正如@MikeC 所说,你必须在某个时候echo它。

如果您还没有在其他地方呼应它,请尝试:

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

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

 var added = !data.status;

更新

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

把你的错误函数改成这个,调试发生了什么:

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

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

【讨论】:

  • 但我需要得到的是,如果添加或删除了书签,该功能是否成功以及其中发生了什么。我只是举了一个例子,我从服务器端得到了什么。
  • @William 我明白了,但是您是否在 PHP 中的某处呼应了 json_encode()?你明白return json_encode() 本身不会将任何东西从服务器端发送回 JS 吗?
  • 好的,我将return 更改为echo 并将array("status" =&gt; false, "added" =&gt; true) 更改为"status" =&gt; true,但我仍然只收到200 号电话console.log(data)。
  • 好的,这可能意味着您的服务器实际上正在返回 HTML,因为您在那里遇到了一些错误,它没有像您想象的那样返回 JSON。尝试在您的错误函数中添加console.log(jqXHR.responseText) 并查看它的内容。仔细检查您的 PHP 脚本中没有错误(例如,尝试自行运行您的 PHP 脚本以检查它是否有效)。
  • @William 好的,在 PHP 中的 echo json_encode 行之后,如果添加 die(); 会发生什么?
猜你喜欢
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-25
  • 2023-03-19
  • 2020-07-28
  • 2018-08-06
  • 2013-10-26
相关资源
最近更新 更多