この関数を機能させようとしています。この関数は、パラメーターurl
の要求を実行してから、関数であるcallback
にresponseTextを送信します。
readyState 1
にしか到達しないようです(Firebugコマンドのおかげです)。
ここにあります:
function Request(url, callback){
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} else{
return false;
}
httpRequest.onreadystatechange = function(){
console.log(httpRequest.readyState);
if (httpRequest.readyState == 4) {
callback(httpRequest.responseText);
}
};
console.log(httpRequest, url);
httpRequest.open('GET', url, true);
httpRequest.send(null);
}
Onreadystatechangeの代わりにonloadイベントを割り当てるこの問題を回避しました。
function Request(url, callback){
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
} else{
return false;
}
var readyStateChange = function(){
console.log(httpRequest.readyState);
if (httpRequest.readyState == 4) {
callback(httpRequest.responseText);
}
};
if (isFirefox && firefoxVersion > 3) {
httpRequest.onload = readyStateChange;
} else {
httpRequest.onreadystatechange = readyStateChange;
}
console.log(httpRequest, url);
httpRequest.open('GET', url, true);
httpRequest.send(null);
}
ブラウザで直接アクセスして、問題のURLが実際に応答することを確認します。
別のブラウザでテストしても同じ結果が得られますか。
何らかの形式のHTTPモニターを使用して、クライアントからサーバーへの会話を監視します(私のお気に入りは Fiddler )
おそらく、Ajaxリクエストはデータを返しません(したがって、ある種のサーバー側エラー)。これを確認するには、Firebugコンソールでオプション「showXMLHttpRequests」を有効にしてみてください。
FireFoxでも同じ問題が発生しましたが、Chromeでは発生しませんでした。
問題は、mime-typeが「application/octet-stream」に設定されているという応答でした。
「text/html」に変更すると、FireFoxでも機能するようになりました。
私も同じ問題に直面しました。以下のURLを読んで、私は解決しました。
http://bytes.com/topic/javascript/answers/548442-ajax-readystate-1-wall
基本的に、関数をhttpRequest.onreadystatechangeのイベントリスナーとして割り当てると、変数を渡すことができません。 SO変数をHTTP内に埋め込む必要があるPOST文字列をサーバーバックエンドに埋め込み、HTTP応答から取得します。
FF3では問題なく動作します。jQueryを使用する必要はありません。