0

テスト関数はボタン クリック イベントにバインドされています。私は jquerymobile を初めて使用し、JSON 応答を取得しようとしています。JQUERY ドキュメントの内容を実行しましたが、コールバック関数が呼び出されません。

私が間違っていることを教えてもらえますか?

function test(evt) {

    // addNote($('#title').val(),$('#note').val());
    alert("hello");// <----This alert is displayed

    $.get("http://weather.yahooapis.com/forecastjson?w=2502265",{}, function (data) {
        alert("testing");//<--This alert is NOT displayed
        alert("Data Loaded: " + data);//<--This alert is NOT displayed
    }, "json");   

    alert("Hello");//// <----This alert is displayed
} 
4

3 に答える 3

0

まず第一に、àlert("hello")は他のどのオブジェクトよりも先に発火することが期待されます。呼び出しが成功すると、ある時点でハンドラーが呼び出されます。

ただし、クロスサイト ポリシーにより、これが発生する可能性はほとんどありません。開発コンソールを見ると、次のようなものが表示される場合がありますXMLHttpRequest cannot load http://weather.yahooapis.com/forecastjson?w=2502265&_=1348150852704. Origin http://stackoverflow.com is not allowed by Access-Control-Allow-Origin.

エラーのハンドラーを追加したい場合は、それも可能です

コードを拡張するだけです

$.get("http://weather.yahooapis.com/forecastjson?w=2502265",{}, function (data) {
alert("testing");//<--This alert is NOT displayed
alert("Data Loaded: " + data);//<--This alert is NOT displayed
}, "json").fail(function(jqXHR, textStatus) {
  alert( "Request failed: " + textStatus );
});

元のコードの後の .fail に注意してください。提供された関数は、リモート サーバーとの通信でエラーが発生した場合に呼び出されます

于 2012-09-20T14:20:23.083 に答える
0

あなたのページがサイトhttp://weather.yahooapis.comにないことは確かです。任意のサイトからデータを取得するために ajax 呼び出しを行うことは許可されていません。ただし、独自のサイト (HTML ページがダウンロードされるサイト) は除きます。これは、同一生成元ポリシーと呼ばれます。他のサイトからデータを取得する場合は、json-rpc を使用する必要があります。つまり、スクリプト タグを動的に作成し、src 属性をデータを取得するアドレスに設定します。そのサイトがそのようなプロトコルをサポートしている場合、要求されたデータを js スニペットとして返し、GET パラメータとしてセットとしてコールバックを呼び出します。

于 2012-09-20T14:28:31.990 に答える
0

オリジン ポリシーが同じであるため、別のドメインからリクエストを行うことはできません。

別のドメインに対して JSONP 要求を行うことはできますが、問題は、呼び出している Web サーバーが JSONP ではなく JSON を返すことです。ただし、使用できる JSON/JSONP プロキシを作成しました。指定したURLにリクエストを行い、JSONPに変換して返します。

プロキシを呼び出して Yahoo の URL をurlパラメーターに入力し、データ型を次のように変更します"jsonp"

$.get("http://jsonp.guffa.com/Proxy.ashx?url=weather.yahooapis.com%2fforecastjson%3fw=2502265",{}, function (data) {
  ...
, "jsonp");

デモ: http://jsfiddle.net/Guffa/bwZMZ/

情報ページ: http: //jsonp.guffa.com/

于 2012-09-20T16:08:17.860 に答える