2015-01-05 12 views
5

Sto tentando di chiamare un metodo controller da javascript e sembra che si stia riscontrando problemi nell'ottenere questo per l'esecuzione corretta. Ho poca esperienza con javascript e ho seguito altri esempi di come farlo da StackOverflow, ma sto ancora avendo alcuni problemi - se qualcuno può aiutare sarebbe fantastico.ASP.NET Metodo controller di chiamata su MVC 5 da Javascript Errore

Fondamentalmente quello che sto cercando di fare è impostare un tag .data su un oggetto javascript sulla stringa restituita da un metodo sul controller (questo metodo chiama un webservice che esegue una funzione di SQL Server). Il metodo deve essere passato con un parametro che viene utilizzato nella funzione.

Il codice è qui sotto:

codice JavaScript

for (var i = 0; i < stats.length; i++) 
{ 
    var stat = stats[i].data('id'); 
    var color = CallService(stat); 
    this.node.fill = color; 
} 

Metodo JQuery

function CallService(id) { 
    $.ajax({ 
     url: '@Url.Action("CallService", "NodeController")', 
     type: 'GET', 
     dataType: 'json', 
     cache: false, 
     data: { 'id': id }, 
     success: function (color) { 
      return color; 
     }, 
     error: function() { 
      alert('Error occured'); 
     } 
    }); 
} 

controller Metodo

il controller si chiama NodeController- che è quello a cui mi riferisco in url: call of ajax.

Fondamentalmente ciò che sta accadendo è quando ho eseguito nella pagina, ho un errore che dice che non può impostare this.node.fill ad un valore nullo POI ricevo l'avviso che un errore occurred- come ho detto io sono abbastanza inesperto con javascript quindi onestamente non sono nemmeno sicuro se sta chiamando il metodo nell'ordine corretto se ottengo un errore su this.node.fill prima di ricevere il messaggio di errore da JQuery.

Qualsiasi/tutti gli aiuti o suggerimenti sono molto apprezzati !!!

+1

base asincrona errore di codifica: Non è possibile restituire un valore a partire dalla metà di una funzione di callback (come 'il successo:') come ciò accade lungo dopo che la funzione è terminata. @Igor ha alcuni suggerimenti corretti di seguito. –

risposta

5
  1. Se la classe controller è NodeController, utilizzare solo "nodo" per il nome del controller in Url.Action:

    url: '@Url.Action("CallService", "Node")', 
    
  2. Non è possibile tornare in modo sincrono un valore da una funzione asincrona. O passare un callback per CallService a essere chiamato in caso di successo o di utilizzare jQuery promessa - http://api.jquery.com/promise/

  3. Non sappiamo cosa this.node.fill è o dove è definito. Probabilmente, this.node non è definito al momento dell'esecuzione dell'assegnazione.

+0

Grazie! Avevo bisogno di usare tutti i tuoi suggerimenti, oltre a cambiare il tipo da un post a – jhinx

2

non c'è bisogno di scrivere controller con il nome del controller

@Url.Action("CallService", "Node") 
+0

ho provato e non ho risolto il problema - sto ancora vedendo gli stessi errori nello stesso ordine – jhinx

+0

Hai perso l'intero " restituire un valore dal centro di una funzione asincrona "problema :) –

Problemi correlati