9

外部サーバーに AJAX リクエストを送信しようとしています。セキュリティ上の理由から、これを行うには getJSON を使用する必要があることをこれまでに学びましたか?

今、私は外部ページへの単純な呼び出しを行うことができないようです. できるだけ単純化しようとしましたが、まだ機能していません。test.html と test.php の 2 つのファイルがあります。

私のtest.htmlは、テストのためにlocalhostに次のような呼び出しを行います:

    $.getJSON("http://localhost/OutVoice/services/test.php", function(json){
    alert("JSON Data: " + json);
});

そして、test.phpが単純な「テスト」を返すようにしたい:

$results = "test";
echo json_encode($results);

私はおそらくいくつかの信じられないほどの初歩的なミスを犯しているのですが、それを理解できないようです. また、これが機能する場合、 test.php?id=15 のように、test.php ページにデータを送信するにはどうすればよいですか?


test.html ページは、localhost の test.php ページを呼び出しています。同じディレクトリで、エラーは発生しません。アラートは発生しません。

4

3 に答える 3

17

test.php にコールバックがない可能性があります。また、json_encode配列のみを受け入れます。

$results = array("key" => "value");
echo $_GET['callback'] . '(' . json_encode($results) . ')';
// the callback stuff is only needed if you're requesting from different domains

を使用すると、jQuery は自動的に JSONP に切り替わります (つまり、 の代わりにスクリプト タグをXMLHttpRequest使用します) http://。同じドメインに test.html と test.php がある場合は、相対パス (およびコールバックなし) を使用してみてください。

于 2009-04-26T14:26:44.877 に答える
15

モフの答えに注意してください。一般的な XSS 脆弱性があります: http://www.metaltoad.com/blog/using-jsonp-safely

于 2010-11-19T20:57:15.783 に答える
2

最も簡単な解決策は、test.php ファイルへの出力の前に以下のコードを追加することです。そうすれば、使用するメソッドの柔軟性が高まり、標準の ajax 呼び出しが機能するはずです。

header ('Access-Control-Allow-Origin: *');

ただし、制御できないサーバーからデータを取得する場合は、json コールバックを使用してください。

于 2012-04-06T20:45:16.337 に答える