Javascript无法从PHP获取JSON数据

Javascript无法从PHP获取JSON数据,php,javascript,jquery,html,json,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 $res

我在读取用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);
下面是脚本:

$.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函数并返回结果。在使用jQuery的javascript中,我调用:

data = $.parseJSON(data);
然后我可以使用它访问对象的元素。

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

添加以下内容:

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

谢谢,我试过这个。我仍然会在看不到JSON的地方出现错误。我只是在javascript中没有得到响应,只要我把这行注释掉。我可以看到JSON响应,但无法访问任何元素。因此,您可以在控制台中看到JSON数据作为响应返回,但无法使用它?这是一个公平的说法吗?是的,没错。似乎cURL在返回数据时没有明确告诉我。$result变量just true由json_encode编码为1。@rheotron-很好的补充信息。我已经编辑了我的答案,以反映一些您可能需要实施的其他事项。是的,现在可以了。我可以从旋度中得到正确的数据。我现在遇到的唯一问题是,cURL似乎放了很多斜杠,而且它似乎作为字符串返回到Javascript,即使使用json_编码也是如此。有什么想法吗?