0

これがクロスドメインの問題かどうかはわかりません。$.ajaxファイルをロードするために使用しようとしています。しかし、readyState=4 を取得するファイルと、readyState=1 を取得するファイルがあります。

これは、ジャスミン テストを実行するパスです。 file:///home/myname/development/path1/path2/src/test/java/javascript/jasmine/SpecRunner.html

コードでは、関連ファイルを要求するために jQuery.pyte を使用しました。しかし、コードが $.ajax になると、readyState:1 でスタックします。

このようなことをすると、readyState=4 が正しく返され、SpecRunner.html 内のコンテンツが出力されます。


$.ajax({url: 'file:///home/myname/development/path1/path2/src/test/java/javascript/jasmine/SpecRunner.html', async: false}).responseText

しかし、このようなことをすると、readyState=1 しか得られず、何も返されません。


$.ajax({url: 'file:///home/myname/development/path1/path2/src/main/webapp/static/js/core/application/FileThatIWant.js', async: false}).responseText

4

2 に答える 2

1

ブラウザはさまざまな場所で file:// URL を許可していないため、一般的に file:// URL は避ける必要があります。XAMPPを試してみてください。ローカル Web サーバーは簡単に使用できます。間違いなく必要になります。

于 2012-11-06T23:05:27.497 に答える
1

はい、これはクロスドメインの問題です。この問題は、jQuery にクロスドメイン AJAX (JSONP) を強制的に使用させることで解決できます。

$.ajax({
    url:            "yoururl",
    cache:          false,
    crossDomain:    true,
    data:           {}, //put your GET parameters here or directly into the url
    dataType:       "jsonp",
    processData:    true,
    success:        function(data, textStatus, jqXHR){
                        //This will be executed if it worked
                    },
    error:          function(data, textStatus, jqXHR){
                        //This will be executed if it failed
                    },
    timeout:        4000, //You can put any value here
    traditional:    true,
    type:           "GET"
});

jQuery は、ランダムな文字列 (&callback=XXXXXX) を含むコールバック パラメータを自動的に追加します。ターゲット URL は、次を出力する必要があります。

XXXXX(your_output_encoded_in_JSON);

ここで、XXXXX はランダムな文字列です。そのための PHP コードは次のとおりです。

echo $_GET["callback"]."(".json_encode($myoutput).");";

PHP (または使用している言語) ページがそれのみを出力することを確認してください! 代わりに、HTML ページなど、クエリしているページが動的に構築されていない場合は、次のオプションを $.ajax オプション オブジェクトに追加する必要があります。

jsonp:          false,
jsonpCallback:  "mycallback",
mimeType:       "text/javascript",

.html ファイルには次のようなものが含まれます。

mycallback("<html><head></head><body>TEST PAGE. This is a double quote: \" and I didn't forget to escape it!</body></html>");

この手法は、ブラウザーにハードコードされている厳密なクロスドメイン制限を回避するのに非常に便利ですが、GET パラメーターしかサポートしていません。XMLHTTPRequest v2 はクロスドメイン リクエストをサポートしていますが、少なくとも 2016 年まではすべてのユーザーが XHRv2 互換のブラウザーを使用しているとは限りません。 http://caniuse.com/xhr2

于 2012-11-07T01:26:22.113 に答える