2017-01-26 11 views
0

私のajax関数内でthis.chkOKを設定できないようです。私はこれを行うことについて私はちょうど私の問題を解決する必要がありますvalidateFields.call(これ)を呼び出すかもしれないと思ったので、私はそれが事実ではなかったことを知っているように、だから私は次のステップのために何をすべきか分からない。私はこれをグローバル変数に設定する必要はありません。私はFS.ajax内部これはあなたがで動作するように意図され、これと同じではありませんので、それがある変数を外部関数に設定できません

function validateFields() { 

this.chkOK = null; 

this.username = function() { 
    if(FS.gID('username').value.length >= 2) { 

     var user = FS.gID('username').value; 


     //Make sure that the username doesn't already exist 
     FS.ajax('/server/chkUser.php?user='+user,'GET',function(){ 
      validateFields.call(this); 
      if(xmlText == 0) { 

        this.chkOK = true; 
       alert("This user doesn't exist."); 


      } 
      else if(xmlText == 1) { 
       alert("Theres already a user with this username"); 
       this.chkOK = false; 

      } 
     }); 

    } 
    else { 
     alert("empty"); 
     this.chkOK = false; 
    } 
alert(this.chkOK); 

} 
} 
+0

あなたのコードとそれを見ている他の人のために、あなたのコードをフォーマット/インデントする必要があります。 –

答えて

0

this.chkOK = trueを設定しようとしています。 FS.ajaxのthisは、これを意味します。

これを別の変数に割り当てて、FS.ajaxの内部で使用することができます。例えば、

:あなたは理由を知っている限り、あなたは(期待validateFieldsがcallまたは applyによって呼び出されるなど)thisは、あなたがしたくないグローバルオブジェクト(ある関数内this.chkOkを置く理由)、またはstrictモードで undefinedコードが失敗する原因となる

function validateFields() { 

    this.chkOK = null; 

    // ** assign this to that. So you can reference it inside FS.ajax ** 
    var that = this; 

    this.username = function() { 
     if(FS.gID('username').value.length >= 2) { 
      var user = FS.gID('username').value; 

      //Make sure that the username doesn't already exist 
      FS.ajax('/server/chkUser.php?user='+user,'GET',function(){ 
       validateFields.call(this); 
       if(xmlText == 0) { 
        that.chkOK = true; // use `that` instead of `this`. 
        alert("This user doesn't exist."); 
       } else if(xmlText == 1) { 
        alert("Theres already a user with this username"); 
        that.chkOK = false; // use `that` instead of `this` 
       } 
      }); 
     } else { 
      alert("empty"); 
      this.chkOK = false; 
     } 

     alert(this.chkOK); 
    } 
} 
+0

上部の 'this.chkOK = null;'ステートメントに 'this'とは何ですか? –

+0

正直なところ私は完全なコードが見当たらないのでわかりません...私は、この関数がオブジェクト内に存在することを期待しています。 – gie3d

+0

関数内の 'this'へのネイキッドな参照は、関数が' call'または 'apply'で呼び出されない限り、グローバルオブジェクトか厳密なモード' undefined'になります。彼はそのことが関数の局所的な変数であることを意味します、それはあなたがそれを指摘しなければならないようです。 –

1

あなたの例ではthisの値は、あなたのコードで想定しているように、その中で宣言されている関数ではありません。

this.chkOK = null;の代わりにvar chkOK = null;を使用するだけで作業が開始されます。

関連する問題