Javascript无法从PHP获取JSON数据

时间:2013-03-18 23:06:35

标签: php javascript jquery html json

我在读取我在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);

然后我可以访问该对象的元素。

2 个答案:

答案 0 :(得分:6)

将标题更改为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调用中返回的数据 - 确保在返回之前确实需要对其进行编码。

答案 1 :(得分:2)

添加:

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