0

PHPで生成してJavascriptに返すJSONデータの読み取りに少し問題がありますが、その理由はわかりません。

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

これを使用して、オブジェクトの要素にアクセスできます。

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

これを追加:

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