2017-03-13 5 views
0

Ich habe eine Jquery Ajax-Aufruf wie so Rückkehr:JQuery Ajax-Funktion keine Daten

$('body').on('click', '#btnPopulate', function() { 
alert(getTree()); 
}); 


function getTree() { 
var url = getUrlPath() + "/StoryboardAdmin/BuildStoryboardViewModel"; 
$.ajax({ 
    type: "POST", 
    cache: false, 
    url: url, 
    success: function (result) { 
     if (result.success === true) { 
      var data = result.data; 
      return data; 
     } else { 
      return null; 
     } 
    }, 
    error: function (responseText, textStatus, errorThrown) { 
     alert('Error - ' + errorThrown); 
    } 
}); 
} 

Wenn ich auf die Schaltfläche klicken, wird der Alarm-Box sagt nur ‚undefined‘, als ob es keine Daten zurückgegeben werden aber in der Ajax-Aufruf, die "var data = result.data" hat eine Menge Daten darin, wenn ich sie aufhalte. Warum wird das nicht in die Alarmbox zurückgebracht? Die zurückgegebenen Daten sind ein Array von Objekten, wobei jedes Objekt weiterhin ein Array von Objekten enthält. Die Daten werden aber definitiv vom Controller an "var data" zurückgegeben.

+0

was ist das Ergebnis? denn in der success: function (result) ist es kein Objekt und du behandelst es als Objekt. Wenn es json ist, versuche 'var resultobj = $ .parseJSON (result);' – Cr1xus

Antwort

0

Es erster Anruf aufmerksam zu machen, Reifen, den Wert von getTree zurück aufmerksam zu machen. Da getTree keinen definierten Rückgabewert hat, gibt es undefined für den ersten Alert-Aufruf zurück.

diesem Grund sollten Sie ‚undefined‘ sehe zunächst im Warnfeld.

Versuchen Alarm aus Ihrem Ajax-Aufruf Erfolg Rückruf Aufruf statt auf dem Click-Handler:

$('body').on('click', '#btnPopulate', function() { 
    getTree(); 
}); 
function getTree() { 
    var url = getUrlPath() + "/StoryboardAdmin/BuildStoryboardViewModel"; 
    $.ajax({ 
    type: "POST", 
    cache: false, 
    url: url, 
    success: function (result) { 
     if (result.success === true) { 
     var data = result.data; 
     alert(data); 
     } else { 
     return null; 
     } 
    }, 
    error: function (responseText, textStatus, errorThrown) { 
     alert('Error - ' + errorThrown); 
    } 
    }); 
} 
0

Es klingt wie Sie in AJAX Schwierigkeiten zu verstehen, allgemein haben sollten, wenn Sie alert(getTree()) rufen Rückkehr ist es, was getTree() kehrt ... nicht der AJAX Anruf.

Ihre return data; ist eigentlich eine Rückkehr für den Erfolg Handler in Ihrem AJAX selbst nennen. Wenn Sie also die alert(data); dort platzieren, wird der Alarm mit den korrekten Daten angezeigt, wenn der AJAX-Anruf beendet ist.