2016-05-19 19 views
-2

私はシンプルなフォームを持っています。私はそれを提出する。成功したときに呼び出されるisSuccessという関数があります。 isSuccess内で関数testerit()を呼び出します。決して解雇されず、不確定であると不平を言う。 はなぜjQueryのAJAXの成功メソッドにバインドされていない機能を渡すことによって関数内のajax成功コールバック関数ES6

class FormSign { 
    constructor(cfg) { 
     this.init(); 
    } 
    init() { 
     // listen for form submit 
     $('.emailbtn').on('click', (event) = > { 
      event.preventDefault(); 
      this.validateForm(); 
     }); 
    } 
    submitForm() { 
     //.............. 
     $.ajax({ 
      'type': 'POST', 
      'url': '/api/url', 
      'data': forminfo, 
      'success': this.isSuccess, 
      'error': this.isError 
     }) 
     event.preventDefault(); 
    } 
    isSuccess() { 
     //.............. 
     testerit(); 
    } 
    signupError() { 
     //............... 
    } 
    testerit() { 
     console.log('just testing'); 
    } 
} 
+1

何かのか、クラス内のプロパティをtesteritされますか?それ以外の場合は無効な構文です。 isSuccessとsignupErrorと同じです。あなたは私たちに実行しないコードを与えてくれました。私たちができることはあまりありません。 –

+0

これはクラスのコンテキスト内にあります。 –

+0

あなたはテスターを正しく参照していません。 –

答えて

0

は、あなたがあなたのインスタンスへの参照を失ってしまったので、this.testeritを呼び出すことはできませんということです。これを解決するには、インスタンスを関数にバインドするか、インスタンスをjQueryに渡してコンテキストとして使用する必要があります。

$.ajax({ 
    'type': 'POST', 
    context: this, 
    'url': '/api/url', 
    'data': forminfo, 
    'success': this.isSuccess, 
    'error': this.isError 
}) 

または

$.ajax({ 
    'type': 'POST', 
    'url': '/api/url', 
    'data': forminfo, 
    'success': data => this.isSuccess(data), 
    'error': (jqXHR, status, error) => this.isError(jqXHR, status, error) 
}) 

または

$.ajax({ 
    'type': 'POST', 
    'url': '/api/url', 
    'data': forminfo, 
    'success': this.isSuccess.bind(this), 
    'error': this.isError.bind(this) 
}) 

して、適切にインスタンスにtesterit呼び出します。

this.testerit(); 

https://jsfiddle.net/npc0nzjt/

関連する問題