我在读取我在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);
然后我可以访问该对象的元素。
答案 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);