2017-01-10 6 views
0

Funktionsname existiert nicht im aktuellen Kontext ist der Fehler, den es mir gibt. Ich möchte einen dynamischen Ajax-Anruf. Warum passiert das? Ich bekomme die Handler serverseitig bearbeitet, aber ich weiß nicht, wie ich dieses Problem umgehen soll.Warum kann ich das nicht tun?

var getManager = function (functionName, contentDiv) { 
    console.log("aircraft manager refresh called"); 
    $.ajax({ 
     type: "GET", 
     url: '@Url.Action(functionName, "AdminTools")', 
     cache: false, 
     data: {}, 
     error: function() { 
      alert("An error occurred."); 
     }, 
     success: function (data) { 
      $("#".concat(contentDiv)).html(data); 
     } 
    }); 
} 
+3

So funktioniert das nicht. '@ Url.Action' Aufrufe werden * serverseitig * aufgerufen. Zu der Zeit, die Ihr Skript ausgeführt wird, wurde es bereits durch die tatsächliche URL ersetzt – haim770

+2

Konstruieren Sie einfach die Zeichenfolge mit JavaScript 'url:" AdminTools/"+ functionName' – Jasen

+0

Ich schaute nur den Helper als Parameter platzieren, wird es nicht berücksichtigt schlechte Praxis, URLs in den Ajaxanrufen hart zu kodieren? –

Antwort

5

empfehle ich Ihnen koppeln nicht Ihre serverseitigen und clientseitigen Code wie:

$.ajax({ 
    type: "GET", 
    url: '@Url.Action(functionName, "AdminTools")', //THIS 

Es in einen Albtraum verwandeln. Statt dessen:

<div id="#contentDiv" data-url="@Url.Action(functionName, "AdminTools")"> 
@* content *@ 
</div> 

dann

var getManager = function (functionName, contentDiv) { 
    console.log("aircraft manager refresh called"); 
    var url = contentDiv.data("url"); 
    $.ajax({ 
    type: "GET", 
    url: url, 
    // ..... 

, wenn Sie später entscheiden, haben mehrere contentdivs jeder haben kann, eine eigene URL, und Ihr Code ist wiederverwendbar.

+0

Great Answer! Hab meine UpVote. Kann Clarity den Parameter "functionName" aus dem Funktionskonstrukt entfernen? wie in "var getManager = function (contentDiv)" ........... " – DaniDev

+0

Dies ist eher eine abstrakte Antwort, die zeigt, wie die Informationen zu entkoppeln. Wenn Sie etwas Bestimmtes für ein Problem benötigen, das Sie gerade haben, empfehle ich Ihnen, den Ask A Question Button zu verwenden. Sonst werden diese Kommentare über eine Frage, die bei dieser Frage nicht zum Thema gehört, zu geschwätzig. –

+0

Nein, arbeite an einem Problem Ich dachte nur, es war Wert beim Entfernen der Parameter (Funktionsname), so dass nicht zu verwechseln .... ;-) Vielen Dank für Ihre Antwort. – DaniDev

Verwandte Themen