Ajax 呼び出しとその応答を処理するための特別なクラスを作成しているときに、問題に直面しました。
以下のコードの目的: データベースに存在するユーザー レコードに基づいて、さらに使用するためにフラグ「isPersonalDivRequiredFlag」を設定する必要があります。
// New ajax request class
function ajaxRequestHandler(){
this.needOutPutInJSON = 0;
this.url = "/libraries/ajaxHelper.php";
this.requestType = "POST";
this.isPersonalDivRequiredFlag = 0;
};
// Methods written for Class ajaxRequestHandler
ajaxRequestHandler.prototype = {
sentRequest : function(userData, typeID){
var options = {type: this.requestType, context: this, url: this.url, data: { data: userData, type: typeID }};
if(this.needOutPutInJSON){
options.dataType = "json";
}
// Check whether user want to see the response
options.success = function(rec){
if(rec == "1"){
this.isPersonalDivRequiredFlag = 1;
}
};
//Jquery Ajax
$.ajax(options);
},
enableJSONoutput : function(){
this.needOutPutInJSON = 1;
},
getFlagValue : function(){
return this.isPersonalDivRequiredFlag;
},
setFlagValue : function(){
console.log('Setflag Func called.');
this.isPersonalDivRequiredFlag = 1;
}
};
そして、私は以下のコードを使用します。
var newRequest = new ajaxRequestHandler();
console.log('Before change [Value of isPersonalDivRequiredFlag variable] : ' + newRequest.getFlagValue()); // Output 0
newRequest.sentRequest({}, "recordExist");
console.log('After change [Value of isPersonalDivRequiredFlag variable] : ' + newRequest.getFlagValue()); // Output 0
そして、フラグ「isPersonalDivRequiredFlag」をAjax呼び出しのSuccessメソッド内で1に設定すると、独自のメソッド「getFlagValue」関数を介してアクセスされるときにこの値を保持できません。
Ajax呼び出し関数を削除して通常のプロトタイプメソッドにすると、コード全体が正常に機能します。だから私は原因を知っていますが、解決策を見つけることができません:(
私がすでに試したことは何ですか?
インターネットで Google を検索しているときに、人々が提案したいくつかのテクニックを見つけました。
a)Ajax呼び出し内でこの構成を使用しましたが、うまくいきませんでした:(
context:this
b) 成功メソッド内:
var myclass = this;
そして、以下のようにプロトタイプ関数を呼び出します
myclass.setFlagValue();
しかし運がない:(