2017-01-26 7 views
0

Я не могу установить этот.chkOK внутри моей функции ajax. Я не знаю, как я это делаю, поэтому я подумал, что, возможно, вызов validateFields.call (это) должен устранить мою проблему, но я узнал, что это не так. Поэтому я потерял то, что я сделал для своего следующего шага. Я не хочу устанавливать это в глобальную переменную, если только не нужно. Я пытаюсь установить this.chkOK = истинныйне может установить переменную на внешнюю функцию

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

Это происходит потому, что это внутри FS.ajax не то же самое с этим вы хотели работать. this в FS.ajax означает это значение FS

Вы можете присвоить это другой переменной и использовать ее внутри FS.ajax. Например,

Примечания: Если вы не знаете причины, почему вы положили this.chkOk внутри функций (например, как и следовало ожидать validateFields быть вызвано call или apply) this является глобальным объектом (который вы не хотите к) или 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' в инструкции' this.chkOK = null; 'вверху? –

+0

Честно говоря, я не знаю, как я не вижу полный код ... Я ожидаю, что эта функция живет в объекте, поэтому он помещает это в код. – gie3d

+0

Голая ссылка на 'this' внутри функции, если эта функция не вызывается с помощью' call' или 'apply', будет глобальным объектом или в строгом режиме' undefined', что приведет к сбою его кода, поэтому если он означает, что для того, чтобы быть переменной, локальной для функции, кажется, что вы должны это указать. –

1

Значение в вашем примере НЕ является функцией, внутри которой она объявлена, как вы предполагаете в своем коде.

Если вы просто используете var chkOK = null; вместо this.chkOK = null;, он должен начать работать.

 Смежные вопросы

  • Нет связанных вопросов^_^