0

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

这是 JavaScript:

$.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);

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

4

2 回答 2

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

于 2013-03-18T23:08:42.033 回答
2

add this:

header("Content-Type: application/json");
echo json_encode($result);
于 2013-03-18T23:10:16.383 回答