【问题标题】:Javascript unable to get JSON data from PHPJavascript 无法从 PHP 获取 JSON 数据
【发布时间】:2013-03-19 08:25:20
【问题描述】:

我在读取我在 PHP 中生成的 JSON 数据然后传回我的 Javascript 时遇到了一点问题,我不知道为什么。

这里是 PHP:

header("content-type: text/json");

curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);

//execute post
$result = curl_exec($ch);
// echo the result as a JSON object
echo json_encode($result);

这里是 Javscript:

$.post("payment_do.php", { "token": response.response.token, "ip_address": response.ip_address}).done(function(data) {
    console.log(data);
});

似乎我在 PHP 中去掉了标题行,我得到了一个可以在 Javascript 中读取的响应,但我无法以您期望的方式访问任何元素。如果我将标题留在其中,我将无法获得 javascript 可读的响应。

编辑:现在从 php 获得响应,如下所示:

"{\"response\":{\"token\":\"ch_9knTXHoU0dVZsl7iMHyHGg\",\"success\":true,\"amount\":9900,\"currency\":\"AUD\",\"description\":\"test\",\"email\":\"test@test.com\",\"ip_address\":\"1.1.1.1\",\"created_at\":\"2013-03-18T23:49:12Z\",\"status_message\":\"Success!\",\"error_message\":null,\"card\":{\"token\":\"test_token\",\"display_number\":\"XXXX-XXXX-XXXX-0000\",\"scheme\":\"master\",\"address_line1\":\"123 Fake Street Fakington\",\"address_line2\":null,\"address_city\":\"moon\",\"address_postcode\":\"2121\",\"address_state\":\"NSW\",\"address_country\":\"Australia\"},\"transfer\":[],\"amount_refunded\":0,\"total_fees\":999,\"merchant_entitlement\":999,\"refund_pending\":false}}"

最后我不得不删除 php 中的 json_encode 函数并返回结果。然后在javascript(使用jQuery)中调用:

data = $.parseJSON(data);

然后我可以使用它访问对象的元素。

【问题讨论】:

    标签: php javascript jquery html json


    【解决方案1】:

    将您的标题更改为application/json(而不是text/json)。另外,如果你真的想进一步处理curl_exec调用的结果,那么你需要设置一个额外的选项:

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    

    这将导致 curl_exec 调用成功返回数据,而不是 TRUE。

    $result = curl_exec($ch);
    if(! $result) {
        // handle error
    }
    
    echo json_encode($result);
    

    此外,您还需要验证从 cURL 调用返回的数据 - 确保在返回之前确实需要对其进行编码。

    【讨论】:

    • 谢谢,我试过了。我仍然收到看不到 JSON 的错误。只要我注释掉这条线,我就没有在 javascript 中得到任何响应。我可以看到 JSON 响应,但无法访问任何元素。
    • 那么,您在控制台中看到 JSON 数据作为响应返回,但您不能使用它?这是一个公平的说法吗?
    • 是的 - 完全正确。似乎 cURL 在没有我明确告诉它的情况下返回数据。 $result 变量只是 true,它被 json_encode 编码为 1
    • @rheotron - 很好的附加信息。我已经编辑了我的答案,以反映您可能需要实施的一些额外内容。
    • 是的 - 现在可以了。我可以从 cURL 中获取正确的数据。我现在遇到的唯一问题是 cURL 似乎放了很多斜杠,即使使用json_encode,它似乎也作为字符串返回到 Javascript。有什么想法吗?
    【解决方案2】:

    添加这个:

    header("Content-Type: application/json");
    echo json_encode($result);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 2022-10-06
      • 1970-01-01
      • 2016-03-31
      • 2011-12-27
      相关资源
      最近更新 更多