2009-08-13 7 views
1

Ich versuche, einen Ajax-Anruf zu tun und das "Data" div mit den Ergebnissen des Ajax-Anrufs zu füllen, , aber ich bekomme einen Fehler, der sagt: " Server Fehler in '/' Anwendung Die Ressource kann nicht gefunden werden Beschreibung: HTTP 404. Angeforderte URL:/Home/GetStuff " Wenn ich mit Firebug die Anfrage war ein GET zu/Home/GetStuff und die Antwort wurde 404 nicht gefunden . Warum mache ich keinen POST, wie ich es im Ajax-Call verlangte? Wie kann ich einen POST machen?

Ich versuchte mit $ .post und bekam das gleiche Verhalten, obwohl ich den jquery Code nicht überprüft habe, nehme ich an, dass $ .post ein Wrapper um $ .ajax ist.

Auch ich versuchte Ajax.ActionLink und es funktioniert gut, obwohl ich gerne jQuery und nicht die Ajax js-Bibliotheken von Microsoft verwenden würde.

Der Code folgt:

Home/TestStuff.aspx

function aClick() { 
    $.ajax({ 
     type: "POST", 
     url: $("#MeFwd").href, 
     data: ({ accesscode: 102, fname: "JOHN", page: 0 }), 
     dataType: "html", 
     success: renderData 
    }); 
}; 

function renderData(data) { 
    $("#Data").html(data.get_data()); 
} 


<div id="Data"> 
</div> 
<div id="link"> 
    <a href="<%= Url.Action("GetStuff", "Home") %>" id="MeFwd" onclick="aClick"> Click Me!</a> 
</div> 

HomeController.cs

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult GetStuff(int accessCode, string fName, int? page) 
{ 

return "<table><tr><td>Hello World!</td></tr></table>"; 
} 

Antwort

6

Ändern Sie Ihre Onclick = "AKlicken" auf Onclick = "AKlicken(); return false;". Wenn Sie auf den Link klicken, gelangen Sie zur URL, anstatt Ihren JS auszuführen.

+0

Dies wird die Verbindung deaktivieren, aber die URL.Action ist, was das GET an erster Stelle verursacht. Durch das Hinzufügen der Rückgabe false, wie BStuthers hier gesagt hat, sollte es das Problem klären. – JamesEggers

+0

Sie denken nicht, dass er renderData aufrufen und nichts weiterleiten könnte ein Problem sein? – Martin

+0

Ich habe onclick = "aClick" geändert onclick = "aClick(); return false;" und es hat gut funktioniert. Es scheint, als ob renderData aufgerufen wird, wie es funktioniert, gut, außer es sollte sagen: $ ("# Data"). Html (data); Vielen Dank allen. – alexs

0
$('#MeFwd').click(function() { 
    $.ajax({ 
     type: "POST", 
     url: $("#MeFwd").href, 
     data: ({ accesscode: 102, fname: "JOHN", page: 0 }), 
     dataType: "html", 
     success: function(data){ 
      $("#Data").html(data); 
     }); 
    }); 
}; 

Ich glaube nicht Sie angerufen werden können Funktion bei Ihrer Rückkehr ... aber ich könnte falsch liegen.

Oder schauen Sie in Last: http://docs.jquery.com/Ajax/load#urldatacallback