2016-07-04 6 views
1

Ich habe den folgenden Code in Javascript geschrieben,Wie bekomme ich den Wert von `submit.preloader_id =" div # some-id ";` in `befortsend` Methode in Ajax?

var submit = { 
    preloader_id: "", 

    send:function (form_id) { 
    var url = $(form_id).attr("action"); 
    $.ajax({ 
     type: "POST", 
     url: url, 
     data: $(form_id).serialize(), 
     dataType: 'json', 
     success:(result) => { 
     }, 
     error: function(result) { 
     // Some errors 
     }, 
     beforeSend: function() { 
     console.log(this.preloader_id); 
     if (this.preloader_id != "") { 
      run_preloader(this.preloader_id); 
     } 
     }, 
     completes: function() { 
     if (this.preloader_id != "") { 
      run_preloader(this.preloader_id, 'true'); 
     } 
     } 
    }); 
    } 
} 

und ist wie dieses

submit.preloader_id = "form-id"; 
submit.send('div#some-id'); 

Das Problem wird aufgerufen, wenn ich versuche Wert in preloader_id innerhalb dieser Methode

beforeSend: function() { 
    console.log(this.preloader_id); // look if there is id name to fetch 
    if (this.preloader_id != "") { 
    run_preloader(this.preloader_id); 
    } 
}, 
zugewiesen zu bekommen

Ich bekomme undefined,

Wie erhalten Sie den Wert submit.preloader_id = "div#some-id"; in beforesend Methode in Ajax?

Antwort

0

Das Problem liegt daran, dass der Bereich this innerhalb der beforeSend Handler von $.ajax geändert hat. Um dies zu beheben, speichern Sie die Referenz außerhalb des Handlers:

var submit = { 
    preloader_id: "", 

    send:function (form_id) { 
    var _this = this; // store here 
    var url = $(form_id).attr("action"); 

    $.ajax({ 
     type: "POST", 
     url: url, 
     data: $(form_id).serialize(), 
     dataType: 'json', 
     success:(result) => {}, 
     error: function(result) { 
     // Some errors 
     }, 
     beforeSend: function() { 
     // use here... 
     console.log(_this.preloader_id); 
     if (_this.preloader_id != "") { 
      run_preloader(_this.preloader_id); 
     } 
     }, 
     completes: function() { 
     // and here... 
     if (_this.preloader_id != "") { 
      run_preloader(_this.preloader_id, 'true'); 
     } 
     } 
    }); 
    } 
} 
+0

So groß, es funktioniert wirklich. Vielen Dank – Fil

0

this bezieht sich auf den falschen Kontext. Fügen Sie var that = this innerhalb Ihrer send Methode hinzu und verweisen Sie auf preloader_id: that.preloader_id

Verwandte Themen