2

私のdjangoアプリケーションを実行しているのと同じホスト上で残りのサーバー(python bottle)を実行しています。私のdjangoアプリケーションから、ajaxを使用してgetリクエストを実行していますが、残りのサーバーでリクエストのステータスが成功していることを確認できても、リクエストは失敗しています(コード200、成功を返します)

私のAjaxコード:

            $.ajax({
               url: 'http://hostname:port/ListVms/',
               crossDomain: true, 
               contentType: "application/json",
               dataType: 'jsonp',
               success: function(data) {
                   alert('worked');
               },
               error: function() {
                   alert("Sorry, error retrieving!");
               }
           });

Python レスト メソッド:

            @route('/ListVms/', method='GET')
            def get_event():
                return json.dumps(JS)

残りのサービスからの出力:

            [22/Aug/2012 10:25:45] "GET /ListVms/?callback=jQuery17102901058990901989_1345656355311&_=1345656355356 HTTP/1.1" 200 44
4

1 に答える 1

5

サーバーは次のように JSON を返していると思います。

{ "abc": 123 }

この形式は JSONP と互換性がありません。JSONP には、JSON が渡されるコールバック関数が必要です。コールバック関数は、そのクエリ文字列でサーバーに渡されます。

したがって、JSONP を使用すると、ブラウザーは次のようなスクリプト タグを落とします。

<script src="http://hostname:port/ListVms/?callback=jQuery17102901058990901989_1345656355311"></srcipt>

サーバーは次のように応答する必要があります。

jQuery17102901058990901989_1345656355311({
  "abc": 123
});

通常、JSON を提供し、JSONP をサポートしたいサーバーには、次のような条件があります。

if queryString.callback
  render queryString.callback + "(" + jsonData + ")"
else
  render jsonData
于 2012-08-22T17:45:45.323 に答える