Matthew Eernise(詳細はhere)の「自分のAJAX Webアプリケーションの構築」のチュートリアルに基づいて、JavaScriptを使用して基本的なAjaxライブラリを作成しようとしました。 AJAX XML-RPCとRESTのこの本に基づいてAJAXやXMLHttpRequestを取得するためのJavaScriptコンストラクタ関数を作成しましたが、どういうわけかスコープ外の問題を抱えているようで、Ajaxクラスは次のスクリプトでは定義されていません:基本的なAjaxライブラリのバグ
私はスコープの問題を修正するためにvar self = this; // fix loss-of-scope in inner function
を追加しましたにもかかわらず、エラーajax is not defined
を取得
var hand = function (str) {
alert(str);
}
var Ajax = new Ajax(); // new instance as can ben done with PHP5 constructor classes
ajax.doGet ('/fakeserverpage.php', hand);
と、このスクリプトをロードするとAjaxの新しいインスタンスを起動するページに取得エラー。私は何が欠けていますか?
アップデート1
彼らは衝突しないように、ここでは先端のおかげで、新しいインスタンスに別の名前を与えた:
var hand = function (str) {
alert(str);
}
var ajax = new Ajax(); // new instance as can ben done with PHP5 constructor classes
ajax.doGet ('/fakeserverpage.php', hand);
を今、私はもう少しです。 Uncaught TypeError: Object #<Ajax> has no method 'doGet'
アップデート2
ここでは共同のDEVによって推奨されているように、私が代わりにthis.init
のAjax.prototype.init
を使用してみましたが、私はまだ同じエラーを持っている...
更新:今、私は新しいエラーを取得します3 @Soufiana Hassouのおかげで、すべてのメソッドにAjax.prototype
を追加してコードを改善しました。コンストラクターと一緒に作業する必要があることは分かりませんでしたが、それはあります。コードはhttp://pastebin.com/g86k0z8dです。 Could not create XMLHttpRequest object.
このエラーメッセージはメソッドに組み込まれているので動作しますが、何らかの形でオブジェクトを作成することはできません。これは、XMLHttpRequestに対する私の要求にエラーがあることを意味します。すべてのケースをカバーし、ローカルMacPorts MAMPのコードを使用してMac用Firefox 11でこれをテストしました。どちらかというか、私が知らない何か他のもの..
更新4た誤植を修正しました
があります。それから私は偽のサーバページをロードする404を得ました。修正されたパスajax.doGet ('/ajax/fakeserverpage.php', hand);
今すぐOK。私はOKを得るためにコードを生成するためにPHPを取得する必要があります。ヘッダーの応答はOKですが、まだAJAXアラートは表示されません。それから私は、コンソールをチェックし、このエラーを検出しました:http://pastebin.com/g86k0z8d:
self.req is undefined
http://localhost/ajax/ajax.js
Line 78
は、最新のコードを参照してください。私は彼らがまだ必要であると思ったところでさらにAjax.prototype
を追加しました。今、私が取得:いくつかのより多くの変更がVAR self = this
を使用して範囲外の問題のために最初に使用されるいくつかの自殖を取り除くメイド
this.req is null
http://localhost/ajax/ajax.js
Line 100
更新5
。コードはまだ同じpastebinですが、私はそれを更新しました。今、私が持っている:
Ajax.prototype.handleResp is not a function
http://localhost/ajax/ajax.js
Line 92
更新6
私はreq.onreadystatechange = function()
機能に犯した過ちの一部をクリーンアップし、今、私が実行しません。私はlocalhostのFirefoxポップアップブロッカーを無効にして、リロード時に別のタブを開き、テキストundefined
を表示しました。だからほとんどそこにある。エラーはなく、OKのポップアップはありません。 Chromeは本体にundefined
というポップアップを表示しました。更新コード:http://pastebin.com/g86k0z8d通常通り
ありがとうございます!今私はさらなる一歩を踏み出しています。なぜ私は今私が得ているエラーを得るのかを理解する必要があります - 更新された質問を見てください。 – rhand
arxanasの答えを見てください。あなたの新しいエラーはどこから来たのでしょうか? –
はい、私は 'Ajax.prototype.init = function(){'を試しましたが、それでも私には同じエラー 'Uncaught TypeError :オブジェクト#にはメソッド 'doGet'がありませんので、他に何かがあるはずです。まだ –
rhand