Ich versuche, diesen AJAX-Beitrag auszuführen, erhalte jedoch aus irgendeinem Grund einen Server 500-Fehler. Ich kann sehen, dass es Haltepunkte im Controller trifft. Das Problem scheint also im Rückruf zu liegen. Jemand?
$.ajax({
type: "POST",
url: "InlineNotes/Note.ashx?id=" + noteid,
data: "{}",
dataType: "json",
success: function(data) {
alert(data[1]);
},
error: function(data){
alert("fail");
}
});
Dies ist die Zeichenfolge, die zurückgegeben werden sollte:
{status:'200', text: 'Something'}
javascript
jquery
ajax
Nick
quelle
quelle
Antworten:
Ich vermute, dass die Servermethode eine Ausnahme auslöst, nachdem sie Ihren Haltepunkt überschritten hat. Verwenden Sie Firefox / Firebug oder die IE8-Entwicklertools, um die tatsächliche Antwort anzuzeigen, die Sie vom Server erhalten. Wenn es eine Ausnahme gegeben hat, erhalten Sie das YSOD-HTML, mit dessen Hilfe Sie herausfinden können, wo Sie suchen müssen.
Eine weitere Sache - Ihre Dateneigenschaft sollte {} nicht "{}" sein, das erstere ist ein leeres Objekt, während das letztere eine Zeichenfolge ist, die als Abfrageparameter ungültig ist. Besser noch, lassen Sie es einfach weg, wenn Sie keine Daten übergeben.
quelle
Falls jemand das Codeigniter-Framework verwendet, kann das Problem durch die aktivierte CSRF-Schutzkonfiguration verursacht werden.
quelle
Ich hatte gerade dieses Problem selbst, obwohl ich in meinem Fall den Grund dafür nicht finden konnte, als ich von
POST
zu wechselteGET
, verschwand der Problem 500-Fehler!type:'POST'
quelle
Dies ist Ajax Request Simple Code zum Abrufen von Daten über Ajax Request
$.ajax({ type: "POST", url: "InlineNotes/Note.ashx", data: '{"id":"' + noteid+'"}', contentType: "application/json; charset=utf-8", dataType: "json", success: function(data) { alert(data.d); }, error: function(data){ alert("fail"); } });
quelle
Ich hatte einen ähnlichen zusammengesetzten Fehler, der zwei Lösungen erforderte. In meinem Fall war der Technologie-Stack MVC / ASP.NET / IIS / JQuery. Die Serverseite schlug mit einem 500-Fehler fehl, und dies trat auf, bevor die Anforderung vom Controller verarbeitet wurde, was das Debuggen auf der Serverseite schwierig machte.
Mit dem folgenden clientseitigen Debug konnte ich den Serverfehler ermitteln
Zeigen Sie im Fehlerrückruf $ .ajax die Fehlerdetails der Konsole an
error: (error) => { console.log(JSON.stringify(error)); }
Dies ermöglichte es mir zumindest, den anfänglichen Serverfehler anzuzeigen
"Die JSON-Anforderung war zu groß, um serialisiert zu werden."
Dies wurde im Client web.config behoben
<appSettings> <add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
Die Anforderung ist jedoch weiterhin fehlgeschlagen. Aber diesmal mit einem anderen Fehler, den ich jetzt auf der Serverseite debuggen konnte
"Anfrage zu groß"
Dies wurde behoben, indem dem Dienst web.config Folgendes hinzugefügt wurde
<configuration> … <system.serviceModel> <bindings> <basicHttpBinding> <binding maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferPoolSize="524288"> <readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> </binding> </basicHttpBinding> </bindings>
Die Konfigurationswerte müssen möglicherweise weiter optimiert werden, aber zumindest wurden die durch den Ajax-Beitrag verursachten Serverfehler behoben.
quelle
Sie können hier (oder hier ) nach HTTP-Statuscodes suchen. Dieser Fehler sagt Ihnen Folgendes:
"Der Server hat einen unerwarteten Zustand festgestellt, der die Erfüllung der Anforderung verhindert hat."
Sie müssen Ihren Server debuggen.
quelle
Ich stoße heute auf dasselbe. Aktivieren Sie, wie zuvor vorgeschlagen, Firebug für Firefox, aktivieren Sie die Konsole und zeigen Sie eine Vorschau der POST-Antwort an. Das half mir herauszufinden, wie dumm das Problem war. Meine Aktion erwartete den Wert eines Typs int und ich postete eine Zeichenfolge. (ASP.NET MVC2)
quelle
In EventVwr sollte ein Ereignis protokolliert sein (Warnung von asp.net), das Ihnen weitere Informationen darüber geben kann, wo der Fehler liegen könnte.
quelle
Ein 500 von ASP.NET bedeutet wahrscheinlich, dass irgendwann eine nicht behandelte Ausnahme ausgelöst wurde, als die Anforderung bearbeitet wurde.
Ich schlage vor, dass Sie dem Webserverprozess einen Debugger hinzufügen (vorausgesetzt, Sie haben Zugriff).
Eine seltsame Sache: Sie stellen eine POST-Anfrage an den Server, übergeben jedoch keine Daten (alles befindet sich in der Abfragezeichenfolge). Vielleicht sollte es stattdessen eine GET-Anfrage sein?
Sie sollten auch überprüfen, ob die URL korrekt ist.
quelle
Ich stehe heute nur vor diesem Problem. Mit dieser Art von Fehler erhalten Sie keine Antworten vom Server. Daher ist es sehr schwierig, das Problem zu finden.
Aber ich kann Ihnen sagen, dass "500 interner Serverfehler" ein Fehler ist, wenn der Server nicht der Client ist. Sie haben einen Fehler im serverseitigen Skript erhalten. Kommentieren Sie das Schließen des Codes durch Schließen aus und versuchen Sie es erneut. Sie werden bald feststellen, dass Sie irgendwo einen Charakter vermissen.
quelle
Sie können diesen Fehler auch in VB erhalten, wenn die von Ihnen aufgerufene Funktion mit Public Shared Function und nicht mit Public Function im Webservice beginnt . (Wie es passieren kann, wenn Sie die Funktion aus einer Klasse verschieben oder kopieren). Nur eine andere Sache, auf die man achten muss.
quelle
Können Sie die Signatur Ihrer Methode veröffentlichen, die diesen Beitrag akzeptieren soll?
Außerdem erhalte ich dieselbe Fehlermeldung, möglicherweise aus einem anderen Grund. Mein YSOD hat darüber gesprochen, dass das Wörterbuch keinen Wert für den nicht nullbaren Wert enthält. Die Art und Weise, wie ich die YSOD-Informationen erhielt, bestand darin, einen Haltepunkt in die $ .ajax-Funktion zu setzen, der eine Fehlerrückgabe wie folgt behandelte:
<script type="text/javascript" language="javascript"> function SubmitAjax(url, message, successFunc, errorFunc) { $.ajax({ type:'POST', url:url, data:message, contentType: 'application/json; charset=utf-8', dataType: 'json', success:successFunc, error:errorFunc }); };
Dann ist mein errorFunc-Javascript so:
function(request, textStatus, errorThrown) { $("#install").text("Error doing auto-installer search, proceed with ticket submission\n" +request.statusText); }
Mit IE ging ich zum Menü -> Skript-Debugger -> Pause bei der nächsten Anweisung. Dann ging ich, um den Code auszulösen, der meinen Beitrag starten würde. Dies führte mich normalerweise irgendwo tief in die Bibliothek von jQuery, anstatt dorthin, wo ich wollte, da die ausgewählte Dropdown-Öffnung jQuery auslöste. Also drückte ich StepOver, dann brach auch die nächste Zeile, wo ich sein wollte. Dann wechselt VS für diese Seite in den clientseitigen (dynamischen) Modus, und ich habe eine Unterbrechung in die
$("#install")
Zeile eingefügt, damit ich (mit der Maus über das Debuggen) sehen kann, was angefordert wurde, textStatus, errorThrown. Anfrage. In request.ResponseText gab es eine HTML-Nachricht, in der ich sah:<title>The parameters dictionary contains a null entry for parameter 'appId' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ContentResult CheckForInstaller(Int32)' in 'HLIT_TicketingMVC.Controllers.TicketController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.<br>Parameter name: parameters</title>
Überprüfen Sie dies alles und veröffentlichen Sie die Signatur Ihrer Controller-Methode, falls dies Teil des Problems ist
quelle
Ich hatte diesen Fehler zu. Ich hatte die .htaccess-Umleitung in einem Verzeichnis konfiguriert. Nun, es leitet Ajax-Aufrufe an ofcourse (
$.post(../ajax.php)
) um, sodass die eigentliche Datei nicht gefunden werden konnte (was zu 500 Fehlern führte).Ich habe es 'behoben', indem ich die Datei ajax.php in ein Verzeichnis gestellt habe (also
.htaccess
nicht betroffen).quelle
Ich konnte die Lösung mithilfe des Chrome- Debuggers finden (ich habe Firebug oder andere Tools von Drittanbietern nicht installiert).
Es zeigte mir, dass ich ein Problem auf dem Server hatte, als ich einen Wert zurückgab, der sich selbst referenzierte.
quelle
In meinem Fall war es ein einfaches Problem, aber schwer zu finden. Die Seitenanweisung hatte falsche Inherits-Attribute. Es muss nur die oberste Ebene enthalten und es hat funktioniert.
Falscher Code
<%@ Page Language="C#" CodeBehind="BusLogic.aspx.cs" Inherits="BusLogic"%>
Richtiger Code
<%@ Page Language="C#" CodeBehind="BusLogic.aspx.cs" Inherits="Web.BusLogic" %>
quelle
Laden Sie bei Verwendung des CodeIgniter-Frameworks mit aktiviertem CSRF-Schutz das folgende Skript auf jeder Seite, auf der ein Ajax-POST auftreten kann:
$(function(){ $.ajaxSetup({ data: { <?php echo $this->config->item('csrf_token_name'); ?>: $.cookie('<?php echo $this->config->item('csrf_cookie_name'); ?>') } }); });
Benötigt: jQuery und jQuery.cookie Plugin
Quellen: https://stackoverflow.com/a/7154317/2539869 und http://jerel.co/blog/2012/03/a-simple-solution-to-codeigniter-csrf-protection-and-ajax
quelle
Die JSON-Daten, die Sie an den Server übergeben, sollten denselben Namen haben, den Sie auf der Clientseite erstellt haben. Ex:
var obj = { Id: $('#CompanyId').val(), Name: $("#CompanyName").val() }; $.Ajax(data: obj, url: "home/InsertCompany".....
Wenn der Name anders ist, z.
Sie erhalten diesen Fehler.
Wenn Sie die Daten nicht übergeben, entfernen Sie das Datenattribut aus der AJAX-Anforderung.
quelle
Ich hatte dieses Problem und fand heraus, dass die serverseitige C # -Methode statisch sein sollte .
Kundenseite:
$.ajax({ type: "POST", url: "Default.aspx/ListItem_Selected", data: "{}", dataType: "json", contentType: "application/json; charset=utf-8", success: ListItemElectionSuccess, error: ListItemElectionError }); function ListItemElectionSuccess(data) { alert([data.d]); } function ListItemElectionError(data) { }
Serverseite:
public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public static String ListItem_Selected() { return "server responce"; } }
quelle
Wie bereits erwähnt, sind Ihre Daten für die Rückgabezeichenfolge sehr lang. Daher wurde das JSON-Format beschädigt.
Es gibt einen anderen Weg für dieses Problem. Sie sollten die maximale Größe für JSON-Daten folgendermaßen ändern:
Öffnen Sie die Datei Web.Config und fügen Sie diese Zeilen in den Konfigurationsabschnitt ein
<system.web.extensions> <scripting> <webServices> <jsonSerialization maxJsonLength="50000000"/> </webServices> </scripting> </system.web.extensions>
quelle
Ich hatte auch das gleiche Problem. Hier sind zwei Möglichkeiten, wie ich es gelöst habe: 1. Wenn Sie ein Framework verwenden, stellen Sie sicher, dass Sie auch ein CSRF-Token mit dem Ajax-Aufruf senden. So sieht die Syntax für Laravel aus:
<meta name="_token" content="{{ csrf_token() }}">
Stellen Sie in Ihrer js-Datei sicher, dass Sie dies aufrufen, bevor Sie den Ajax-Aufruf senden
$.ajaxSetup({ headers: { 'X_CSRF-TOKEN' : $('meta[name="_token"]').attr('content') } });
method
vonpost
bisget
quelle
Für mich war der Fehler in der PHP-Datei, an die ich eine Anfrage gesendet habe. Fehler war in der Datenbankverbindung. Nach dem Korrigieren des PHP-Codes wurde der Fehler behoben.
quelle
Ihr Code enthält dataType: json .
In diesem Fall wertet jQuery die Antwort als JSON aus und gibt ein JavaScript-Objekt zurück. Die JSON- Daten werden streng analysiert. Jeder fehlerhafte JSON wird zurückgewiesen und ein Analysefehler wird ausgelöst. Eine leere Antwort wird ebenfalls abgelehnt.
Der Server sollte stattdessen eine Antwort von
null
oder zurückgeben{}
.quelle
Ich fand dies in Chrome, als ich zwei Ajax-Abfragen im jquery- On-Load -Handler durchführte.
dh wie
$(function() { $.ajax() ... $.ajax() ... });
Ich habe es vermieden mit:
setTimeout(function_to_do_2nd_ajax_request, 1);
Es ist vermutlich ein Chrom- und / oder JQuery-Fehler
quelle
Ich hatte dieses Problem, weil die Seite, von der ich Ajax-Post aufgerufen habe, hatte
EnableViewState="false"
undEnableViewStateMac="false"
nicht die Seite, die aufgerufen wurde.Als ich dies auf beide Seiten stellte, fing alles an zu funktionieren. Ich vermutete dies, als ich eine MAC-Adressausnahme sah.
quelle
Ihre Rückgabezeichenfolgendaten können sehr lang sein.
<system.web> <compilation debug="true" targetFramework="4.0" /> <httpRuntime maxRequestLength="2147483647" /> </system.web>
Zum Beispiel:
quelle
Verwenden Sie einen Try Catch-Block auf Ihrer Serverseite und geben Sie im Catch-Block den Ausnahmefehler an den Client zurück. Dies sollte Ihnen eine hilfreiche Fehlermeldung geben.
quelle
Ich hatte ähnliche Probleme mit AJAX-Code, der sporadisch den "500 Internal Server Error" zurückgibt. Ich habe das Problem durch Erhöhen der Werte "fastCGI" RequestTimeout und ActivityTimeout behoben.
quelle
Ich bin spät dran, aber ich hatte dieses Problem und habe gelernt, dass es ein Fehler in meinem PHP-Code war (in meinem Fall die Syntax einer Auswahl für die Datenbank). Normalerweise ist dieser Fehler 500 nach meiner Erfahrung mit Syntax zu tun. Mit anderen Worten: "Peopleware" -Problem! : D.
quelle
Wenn die von Ihnen ausgeführte Abfrage zusätzlich zur Antwort "Fehlgebildeter JSON" ein Objekt oder etwas zurückgibt, das die Serialisierung der Daten verhindert, wird dieser Fehler angezeigt. Sie sollten immer sicher sein, dass Sie JSON und nur JSON am Ende Ihrer Aktionsmethode haben oder von was auch immer Sie die Daten erhalten.
quelle
Normalerweise ist Ihre Eigenschaft nicht ganz richtig oder etwas falsch mit Ihrer Serververarbeitung.
quelle