2016-05-08 3 views
0

Ich bin Anfänger in asp.net MVC, und will einfach json von der Steuerung zu Ajax Variable zu holen, zu diesem Zweck in Sicht Seite diese Ajax-Funktion schreiben:
Warum kann ich keine Daten vom Controller aus der Ajax-Funktion abrufen?

<script> 
    var OutPut; 
    OutPut = "behzad"; 
    function CallService() { 
     $.ajax({ 
      url: '@Url.Action("callService", "myPassword")', 
      type: 'GET', 
      dataType: 'json', 
      cache: false, 
      data: { 'id': 2 }, 
      success: function (color) { 
       OutPut= color; 

      }, 
      error: function() { 
       alert('Error occured'); 
      } 
     }); 
     alert("I think is ok!"+":"+OutPut); 

    } 
</script> 


und dieser Controller:

[HttpGet] 
     public JsonResult callService(int id) 
     { 
      string JSON = "behzad"; 
      return Json(JSON,JsonRequestBehavior.AllowGet); 

     } 


dass ajax-Funktionsaufruf mit diesem hTML-Code in Ansicht Seite:

<button type="button" class="btn btn-success" onclick="CallService()">Success</button> 


aber diese Linie in Ajax-Funktion:

alert("I think is ok!"+":"+OutPut); 


Ausgang ist nicht definiert, was geschehen ist Controller return null oder warum ich nicht definiert Benachrichtigung erhalten, dank?.

+2

Ajax ist async und Ihre 'alert (..)' wird aufgerufen werden, bevor Sie Ihre Ajax-Aufruf eine zurück Wert. In dem Code, den Sie gezeigt haben, wird die Ausgabe "behzad" (nicht undefiniert) sein, weil Sie sie global deklariert haben. –

Antwort

2

Da der AJAX-Aufruf asynchron ist, können Sie die Warnung innerhalb den Erfolg Rückruf setzen sollte:

<script> 
    function CallService() { 
     $.ajax({ 
      url: '@Url.Action("callService", "myPassword")', 
      type: 'GET', 
      cache: false, 
      data: { 'id': 2 }, 
      success: function (color) { 
       alert("I think is ok!" + ":" + color); 
      }, 
      error: function() { 
       alert('Error occurred'); 
      } 
     }); 
    } 
</script> 
+0

danke für die antwort –

Verwandte Themen