0

別のドメイン内のサーバーからいくつかのデータにアクセスしようとしています。

だから私はこのphpコードを持っています:

header('Content-type: application/json');
$callback = $_GET[callback];
echo $callback . '(' . $CIPHERDATA . ')';

クライアント側で実行されるJavaScriptはこれです

$.getJSON("http://mydomain.gr/zerobin-015/?24c3285?callback=?",function(jsondata){
    alert(jsondata.data);
    alert("hi");
});

アラートは表示されません。発生する唯一のことは、必要なすべての情報を含むスクリプトタグを作成することですが、アクセスできません。

<script src="http://mydomain.gr/zerobin-015/?24c3285?callback=jsonp1335048265855&_=1335048265874">
({"data":"{\"iv\":\"smDkNQMt0MIbPABPbAb+xQ\",\"salt\":\"aoFfKV+jHhs\",\"ct\":\"Ns17UQZQN\/ktO2hUW+dPug\"}","meta":{"expire_date":1337635538,"postdate":1335043538}})
</script>

私のjson-pフォーマットに何か問題がありますか?アクセスできるようにするためのこのデータの適切な形式は何ですか?

4

3 に答える 3

2

あなたはそれを正しくやっています。これは、PHPの実行時エラーにすぎません。
PHPスクリプトで、に置き換え$GET[callback]ます$GET['callback']。一重引用符に注意してください。

編集

あなたのURLを見ると、これも置き換える必要があると思います。

http://mydomain.gr/zerobin-015/?24c3285?callback=?

これとともに:

http://mydomain.gr/zerobin-015/?24c3285&callback=?

注:2番目?&に置き換えられます。RFC3986によると、HTTP URLの形式は最大で1つを必要としますか?任意のURLで。この状況は、末尾が原因で少し混乱する可能性がありますか?。$.getJSON()これは、実行時に呼び出しでjQueryに置き換えられます。その最後?最終的なURLには表示されません。だから最終的には1つだけにする必要がありますか?。


編集2

jsonpエンドポイントでHTTPGETを試しました。これが私が使用したURLです:

http://kasem.gr/vasilis-dev/zerobin-015/?xxxxxBigStringHerexxxx=&callback=foo

xxxxBigStringHerexxx、明らかにランダムな40文字と数字の文字列に置き換えられました。私が得た結果:

jsonCallback({"data":"{\"iv\":\"smDkNQMt0MIbPABPbAb+xQ\",
                       \"salt\":\"aoFfKV+jHhs\",\"ct\":\"Ns17UQZQN\/ktO2hUW+dPug\"}",
              "meta":{"expire_date":1337635538,"postdate":1335043538}})

これは、PHPが正しくないことを示しています。jsonCallback「foo」を渡したときのコールバック関数名として使用しています。また、何らかの理由で「データ」はシリアル化されたjson文字列です。これは不必要なステップのようです。ただし、機能の不一致が最も重要です。

これが明確でない場合は、JSONPについてもう少し読むことをお勧めします。

于 2012-04-22T00:36:01.837 に答える
1

サーバーが間違ったリクエストヘッダーを取得しているため、successステートメントの一部としてJSON応答を返さない可能性があります。AJAX呼び出しでエラーのキャッチを追加すると、そこにJSONP応答が表示されるに違いありません。これを修正する正しい方法は、正しいmimetypeヘッダーをサーバーに送信していることを確認して、返されるJSONPコールバックが正しいコンテキスト内で呼び出されるようにすることです。

于 2012-04-21T23:04:22.913 に答える
0

問題はデータ形式にありました。phpが提供する必要のあるjson文字列は次のとおりです。{"data": "{" iv ":" smDkNQMt0MIbPABPbAb + xQ "、" salt ":" aoFfKV + jHhs "、" ct ": "Ns17UQZQNktO2hUW + dPug"} "、" meta ":{" expire_date ":1337635538​​、" postdate ":1335043538}}

同じ文字列でjson_encodeを2回使用するphpコードの間違い。

于 2012-04-23T23:31:44.823 に答える