正常に実行されますが、空のresponseTextを返すXMLHttpRequestを作成しました。
Javascriptは次のとおりです。
var anUrl = "http://api.xxx.com/rates/csv/rates.txt";
var myRequest = new XMLHttpRequest();
callAjax(anUrl);
function callAjax(url) {
myRequest.open("GET", url, true);
myRequest.onreadystatechange = responseAjax;
myRequest.setRequestHeader("Cache-Control", "no-cache");
myRequest.send(null);
}
function responseAjax() {
if(myRequest.readyState == 4) {
if(myRequest.status == 200) {
result = myRequest.responseText;
alert(result);
alert("we made it");
} else {
alert( " An error has occurred: " + myRequest.statusText);
}
}
}
コードは正常に実行されます。私は歩き回って、readyState == 4とstatus == 200を取得しますが、responseTextは常に空白です。
エラーディスパッチ:getPropertiesのログエラー(Safariデバッグ)が表示されますが、参照が見つからないようです。
SafariとFirefoxでローカルとリモートサーバーの両方でコードを実行しました。
URLをブラウザに入力すると、文字列が返され、ステータスコード200が返されます。
Mac Widgetで同じURLに同様のコードを記述しましたが、これは正常に動作しますが、ブラウザーの同じコードで結果が返されることはありません。
http://api.xxx.com/
ドメインの一部ですか?そうでない場合は、 同じオリジンポリシー によってブロックされています。
考えられるいくつかの回避策については、次のStack Overflowの投稿をご覧ください。
問題が解決しました
私の場合、問題は、URLパラメーターにfull pathを使用してajax呼び出し(jQueryの$ .ajax、$。getまたは$ .getJSONメソッドを使用)を行うことでした。
ただし、正しい方法は、urlの値を次のように渡すことです。
url: "site/cgi-bin/serverApp.php"
一部のブラウザは競合せず、テキスト間で区別を行いませんが、Firefox 3.6 for Mac OSでは、このフルパスを "として取ります。クロスサイトスクリプティング "...別のこと、同じブラウザには次のような違いがあります。
http://mydomain.com/site/index.html
そして、置きます
http://www.mydomain.com/site/index.html
実際、それは正しいポイントビューですが、ほとんどの実装は区別しないため、解決策は、メソッドのスクリプトへのフルパスを指定するすべてのテキストを削除することでしたajaxリクエスト[〜#〜] and [〜#〜].... remove[〜# 〜.base [〜#〜]index.htmlファイルのタグ
base href = "http://mydomain.com/" <---悪い考えです、削除してください!
削除しない場合、このシステムのこのバージョンのブラウザは、クロスサイトリクエストのようにajaxリクエストを受け取る可能性があります。
私は同じ問題を抱えていますが、Mac OSマシンのみです。問題は、Firefoxがajax応答を「クロスサイト」呼び出しとして扱うことです。他のマシン/ブラウザーでは、それは正常に動作します。私はこれについて何も助けを見つけませんでした(これはfirefoxの実装の問題だと思います)が、サーバー側で次のコードを証明するつもりです。
header('Content-type: application/json');
ブラウザがデータを「json data」として取得することを確認するには...
ブラウザがクロスサイトスクリプティングを妨げています。
URLがドメイン外にある場合は、サーバー側でこれを行うか、ドメインに移動する必要があります。
これは最善の方法ではないかもしれません。しかし、それはどういうわけか私のために働いたので、私はそれで走るつもりです。
データを返すphp関数で、戻り行の1行前に、echoステートメントを追加して、送信するデータをエコーします。
なぜそれが機能したのかは確かですが、実際に機能しました。
あなたと同様の問題がありました。ここで必要なことは、ここにあるdocument.domainソリューションを使用することです。
また、Webサービス側でシンを変更する必要がありました。ここにある「Access-Control-Allow-Origin」ヘッダーを使用しました。