2016-09-14 1 views
-1

Ich arbeite derzeit mit Google Maps und ich möchte einige Standorte in einer Datenbank speichern und sie durch einen Ajax-Aufruf abrufen, nach denen ich JavaScript-Objekte aus den Standorten.Ausführen von Javascript-Funktion von Ajax Erfolg Anruf

Was den Code angeht bin ich mir nicht wirklich sicher, warum das nicht funktioniert, kann mir das jemand aufklären?

Chrome Console: Uncaught Typeerror: this.processData ist keine Funktion

var Locations = { 
 
    count: 0, 
 
    location: [], 
 
    processData: function (data) { 
 
     console.log(data); 
 
    }, 
 
    getData: function() { 
 
     'use strict'; 
 
     
 
     jQuery.ajax({ 
 
      type: 'get', 
 
      url: '../../php/functions/getLocations.function.php', 
 
      dataType: 'json', 
 
      success: function (data) { 
 
       this.processData(data); 
 
      } 
 
     }); 
 
    } 
 
};
Über den Kommentar Kevin B geschrieben, die getan Teil ausgeführt werden soll, wenn der Asynchron Anruf vollständig richtig ist? Letzte Änderung:

function getLocation() { 
    return $.ajax({ 
     type: 'get', 
     url: '../../php/functions/getLocations.function.php', 
     dataType: 'json' 
    }); 
} 

getLocation().done(function(result) { 
    console.log(result); 
    return result; 
}); 
+0

I habe diesen Beitrag bearbeiten mit einem neuen Problem .. – Smoothal

+0

und es ist immer noch ein Duplikat, sondern an einem anderen Frage : Sie können nicht von einer asynchronen Funktion zurückkehren. das ist unmöglich. –

+0

Ich rollte die Frage zurück, weil Ihre Bearbeitung vorhandene Antworten ungültig gemacht hat. Wenn Sie eine neue Frage haben, sollten Sie sie als neue Frage stellen. Aber derjenige, den Sie fragen wollten, ist ein sehr beliebter Betrogener; Sie sollten zuerst suchen. http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call –

Antwort

1

Das Schlüsselwort this bezieht sich auf den Umfang es in initialisiert wurde Also in Ihrem Fall ist es der Umfang der success -function ist.. Es bezieht sich nicht auf das Objekt selbst.

Damit dies funktioniert, müssen Sie den Verweis auf das Objekt zwischenspeichern, um es innerhalb der success-Funktion zu verwenden oder auf das Objekt selbst verweisen.

Objektverweis:

jQuery.ajax({ 
    type: 'get', 
    url: '/echo/json/', 
    dataType: 'json', 
    success: function(data) { 
    Locations.processData(data); 
    } 
}); 

Cached this

getData: function() { 
    'use strict'; 
    let _this = this; 
    jQuery.ajax({ 
     type: 'get', 
     url: '/echo/json/', 
     dataType: 'json', 
     success: function(data) { 
     _this.processData(data); 
     } 
    }); 
    } 

Fiddle

+0

Antwort ist fast da .... ein Beispiel geben. – Adam

+0

Adam hat Recht, aber ich habe die Idee. Ich werde versuchen, es anzupassen – Smoothal

+0

@Smooth 2 spezifische Beispiele hinzugefügt. Ich persönlich würde mit dem zweiten gehen. – empiric

0

this zeigt auf Ajax-Einstellungen Objekt. Verwenden Sie entweder einen $ .proxy oder this verwenden, nachdem es in einer Variablen zu speichern, so dass Sie das Recht zielt context

getData: function() { 
     'use strict'; 
     var thisLocation = this; 
     jQuery.ajax({ 
      type: 'get', 
      url: '../../php/functions/getLocations.function.php', 
      dataType: 'json', 
      success: function (data) { 
       thisLocation.processData(data); 
+0

@KevinB - der Beantworter hatte kein Codebeispiel bereitgestellt, sondern nur darauf hingewiesen, dass 'das' falsch war, als ich meinen Kommentar machte – Adam

+0

Warum nutzlos? Es ist richtig. –

+0

die Antwort existiert bereits auf dem Ziel dupieren. doppelte Antwort -> nicht nützlich. –