0

私は Angular デモの 1 つを試してみましたが、jsonp で遊んでみたかったのですが、動作させることができなかったので、同じコードを jsbin に貼り付けて、何が問題なのかを皆さんに質問できるようにしました。そして、それが機能したことに注意してください。

私の開発サイトでまったく同じコードをもう一度試しました。そして、それは機能しません。http コード 200 で有効な json が返されたというネットワーク ログを webkit で確認できます。しかし、コールバックは実行されません。

同じリクエストでjQuery-Ajaxを試してみたところ、うまくいきました。私のため

$(document).ready(function() {
    $.getJSON('http://angularjs.org/greet.php?callback=?&name=Super%20Hero', function(data) {
        console.log(data); // Works
    });
});

これは、ローカルhttp://jsbin.com/ojibel/edit#html,liveで動作しない私のコードのデモです 。

編集:

.html から .php 拡張子に切り替えたところ、機能し始めました。それで、Apacheで何かをしなければなりませんか?

4

2 に答える 2

1

JQUERY api docでは、それが言及されています

「ただし、JSONP およびクロスドメイン GET リクエストは XHR を使用しないため、その場合、成功コールバックに渡される jqXHR および textStatus パラメータは未定義です。」

http://jsbin.com/ojibel/3/editでコードを変更しました

getData という関数を作成し、同じ関数をコールバック URL として渡していることがわかる場合は、それをコンソールに表示できます。

JSONP が機能する方法は、URL をスクリプト タグとして追加しようとし、URL の出力がスクリプトと見なされ、そのコードがそのまま実行されることです。したがって、出力に xyx をコールバックすると、次のようなものになります

xyz(DATA_FROM_SERVER)

と同じになります

<script>xyz(DATA_FROM_SERVER)</script>
于 2012-07-04T09:58:09.837 に答える
1

「うまくいかない」と言うとき、あなたが取っているステップと、期待される結果と実際の結果を説明できますか?

あなたの例では、$templateCache で $http を使用しており、html ファイルの下部に があることに注意してください。<script type="text/ng-template" id="http-hello.html">Hello, $http!</script>これにより、リクエストに対する応答がキャッシュに取り込まれhttp-hello.htmlます。したがって、/http-hello.html をフェッチすると、サーバーへのリクエストは行われず、キャッシュされたコンテンツでコールバックが呼び出されます。

于 2012-07-04T14:19:13.673 に答える