1

シンプルな Jquery モバイル アプリケーションを作成しようとしています。私のセットアップは次のとおりです。

  1. jQuery クライアントはlocalhost:9090/myappで実行されています。
  2. サーバーはlocalhost:9010/paperboyで実行されています
  3. 私はWindowsを使用しているため、サーバー側ではPythonマイクロフレームワークである「ボトル」を使用して作成する単純なサーバーを使用しています。
  4. サーバーは要求に応じて json を返します。これは、Chrome または Firefox ではっきりと確認できます。
  5. 応答を検証しました。これは有効な JSON です。

私が直面している問題は、クライアントにサーバーの応答からjsonを読み取らせたいということです。
しかし、これはクロスドメインの問題であるため、そうすることができません。
クライアント用の私のajaxコードは次のとおりです。

$.ajax({
        url: "http://localhost:9010/paperboy/toi",
        type:"GET",
        data:$(this),
        dataType:"jsonp",
        //jsonp:"callback",   no support on the server

        success:function(result){
            console.log("ajax result: " + result);
        },

        error:function(e){
            console.log("Error :" + e);
        }
    });

私のボトルサーバーコードは次のとおりです。

from bottle import route, run, template, response
from paperboy import getToiNews

''' call http://localhost:9010/paperboy/toi in browser'''

@route('/paperboy/:source')
def index(source='All'):
    print "requesting news list for %s" % source
    resultJson = getToiNews()
    response.content_type = "application/javascript"
    return resultJson

run(host='localhost', port=9010)

ただし、アプリケーションを実行すると、最初は「ajax origin policy error」が発生していましたが、コンテンツ タイプをサーバーに追加するとすぐに消えました。
現在、ajax 呼び出しはエラーなしで実行されますが、常に「エラー」ハンドラーが呼び出されます。いろいろ組み合わせてみましたがだめでした。私が理解できなかったのは、サーバーにjsonpサポートを追加することです。
この件に関するご支援に感謝いたします。また、ご協力いただきありがとうございます。
ありがとう。

4

1 に答える 1

4

クロスオリジンコールであるため、デフォルトではSOPで許可されていないため、自分で言った。

サーバーを管理している(そして管理している)場合は、CORSを使用してリクエストを許可できます。これは、最新のブラウザで機能します。(残念ながら、IE8とIE9の場合XDomainRequest、標準ではなくMicrosoft固有のオブジェクトを使用できるようにするためにjQueryパッチが必要XMLHttpRequestです。jQueryチームはそれをライブラリに入れることを拒否します。IE10は最終的にクロスドメイン処理を追加しますにXMLHttpRequest。)

または、応答がJSONであるため、代わりに非常によく似たJSON-Pを使用できます。これには、すべてのブラウザーで(jQueryパッチなしで)動作するという利点があります。

于 2013-02-13T08:40:31.820 に答える