it-swarm.com.de

JQuery Ajax Post führt zu 500 internen Serverfehlern

Ich versuche, diesen AJAX - Post auszuführen, aber aus irgendeinem Grund erhalte ich einen Server 500-Fehler. Ich kann sehen, dass es Haltepunkte im Controller trifft. Das Problem scheint also beim Callback 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 der String, der zurückgegeben werden soll:

{status:'200', text: 'Something'}
67
Nick

Ich vermute, dass die Servermethode eine Ausnahme auslöst, nachdem sie Ihren Haltepunkt passiert hat. Verwenden Sie Firefox/Firebug oder die IE8-Entwicklertools, um die tatsächliche Antwort zu prüfen, die Sie vom Server erhalten. Wenn es eine Ausnahme gab, erhalten Sie die YSOD-HTML-Datei, mit der 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 weitergeben.

64
tvanfosson

falls jemand das Codeigniter-Framework verwendet, kann das Problem durch die aktivierte csrf-Schutzkonfiguration verursacht werden.

29
v1r00z

Ich hatte dieses Problem gerade selbst, obwohl ich in meinem Fall den Grund dafür nicht finden konnte. Beim Wechsel von POST zu GET verschwand der Problem 500-Fehler!

 type:'POST'
17
Stian

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");
    }
});
15
BTE

Sie können HTTP-Statuscodes nachschlagen hier (oder hier ). Dieser Fehler sagt Ihnen:

"Der Server hat eine unerwartete Bedingung festgestellt, durch die die Anforderung nicht erfüllt wurde."

Sie müssen Ihren Server debuggen.

9
Tom

Ich bin heute auf das Gleiche gestoßen. Wie zuvor vorgeschlagen, erhalten Sie Firebug für Firefox, aktivieren Sie die Konsole und zeigen Sie eine Vorschau der Antwort POST an. Das hat mir geholfen herauszufinden, wie dumm das Problem war. Meine Aktion erwartete den Wert eines Typs int und ich postete eine Zeichenfolge. (ASP.NET MVC2)

8
Artur Kędzior

Ich habe einen ähnlichen Verbindungsfehler erlebt, der zwei Lösungen erforderte. In meinem Fall war der Technologie-Stack MVC/ASP.NET/IIS/JQuery. Die Serverseite schlug mit einem Fehler von 500 fehl und dieser Fehler trat auf, bevor die Anforderung vom Controller verarbeitet wurde, was das Debuggen auf der Serverseite schwierig machte.

Mit dem folgenden clientseitigen Debugging konnte ich den Serverfehler ermitteln 

Zeigen Sie im Fehleraufruf $ .ajax die Fehlerdetails der Konsole an

  error: (error) => {
                     console.log(JSON.stringify(error));
   }

Dies ermöglichte mir zumindest, den ersten 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 Anfrage noch ist jedoch fehlgeschlagen. Diesmal jedoch mit einem anderen Fehler, den ich jetzt auf der Serverseite debuggen konnte

"Anforderungsobjekt 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 angepasst werden, aber zumindest wurden die durch die Ajax-Post verursachten Serverfehler behoben.

8
Robotronic

In EventVwr (Warnung von asp.net) sollte ein Ereignis protokolliert sein, das Ihnen weitere Informationen dazu liefert, wo sich der Fehler befinden könnte.

6
Ramesh

Ein 500 von ASP.NET bedeutet wahrscheinlich, dass eine unbehandelte Ausnahme zu einem bestimmten Zeitpunkt ausgelöst wurde, als die Anforderung bearbeitet wurde.

Ich schlage vor, dass Sie einen Debugger an den Webserverprozess anhängen (sofern Sie Zugriff haben).

Eine seltsame Sache: Sie stellen eine POST - Anforderung an den Server, übergeben jedoch keine Daten (alles ist in der Abfragezeichenfolge enthalten). Vielleicht sollte es stattdessen eine GET-Anfrage sein?

Sie sollten auch überprüfen, ob die URL korrekt ist.

4
codeape

Sie können diesen Fehler auch in VB erhalten, wenn die aufgerufene Funktion mit Public Shared Function statt mit Public Function im Webservice beginnt. (Dies kann passieren, wenn Sie die Funktion aus einer Klasse verschieben oder kopieren). Nur eine andere Sache, auf die Sie achten sollten. 

3
Cody Hackjob

Ich stehe gerade heute vor diesem Problem. Mit dieser Art von Fehler erhalten Sie keine Antworten vom Server. Daher ist es sehr schwer, das Problem zu finden.

Aber ich kann Ihnen sagen, "500 interne Serverfehler" ist ein Fehler mit dem Server nicht mit dem Client. Sie haben einen Fehler im serverseitigen Skript. Kommentieren Sie die Code-Schließung durch Schließung aus und versuchen Sie es erneut auszuführen. Sie werden bald feststellen, dass Sie irgendwo einen Charakter vermissen.

3
angry kiwi

Ich konnte die Lösung mithilfe des Chrome Debugger finden (Firebug oder andere Tools von Drittanbietern sind nicht installiert).

  • Wechseln Sie zur Registerkarte "Entwickler" (STRG + MAJ + I).
  • Netzwerk > auf die fehlgeschlagene Anfrage klicken, in rot> Vorschau

Es zeigte mir, dass ich ein Problem auf dem Server hatte, als ich einen Wert zurückgab, der selbstreferenzierend war.

2
Mikaël Mayer

Kannst du die Signatur deiner Methode posten, die diesen Beitrag annehmen soll?

Zusätzlich bekomme ich dieselbe Fehlermeldung, möglicherweise aus einem anderen Grund. Mein YSOD sprach über das Wörterbuch, das keinen Wert für den nicht-nullfähigen Wert enthält. Die Art und Weise, wie ich die YSOD-Informationen erhielt, bestand darin, einen Haltepunkt in der $ .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 Anzeigen des Menüs -> Skript-Debugger -> Pause bei der nächsten Anweisung ..__ und löste dann den Code aus, der meinen Beitrag starten würde. Dies brachte mich in der Regel irgendwo tief in die Bibliothek von jQuery, anstatt dort, wo ich wollte, denn die Auswahl der Dropdown-Öffnung löste jQuery aus. Also habe ich auf StepOver gestoßen, dann würde die eigentliche nächste Zeile auch brechen, und genau dort wollte ich sein. Dann wechselt VS in den clientseitigen (dynamischen) Modus für diese Seite, und ich habe eine Unterbrechung in der $("#install")-Zeile eingefügt, sodass ich (mit der Maus über das Debuggen) sehen konnte, was in request, textStatus, errorThrown war. anfordern. In request.ResponseText gab es eine HTML-Nachricht, in der ich Folgendes 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 das alles und senden Sie die Signatur Ihrer Controller-Methode, falls dies ein Teil des Problems ist

2
Maslow

Ich fand diesen Fehler zu. Ich hatte die .htaccess-Weiterleitung in einem Verzeichnis konfiguriert. Nun, es ruft ajax-Aufrufe zu ofcourse ($.post(../ajax.php)) um, sodass die eigentliche Datei nicht gefunden werden konnte (was zu einem Fehler von 500 führt).

Ich habe das Problem behoben, indem ich die ajax.php in einem Verzeichnis abgelegt habe (also hat .htaccess keinen Einfluss).

2
Tessmore

In meinem Fall war es ein einfaches Problem, aber schwer zu finden. Die Direktive der Seite hatte falsche Attribute. Es muss nur die oberste Ebene enthalten sein und es hat funktioniert. 

Falscher Code

<%@ Page Language="C#" CodeBehind="BusLogic.aspx.cs" Inherits="BusLogic"%>

Korrekter Code

<%@ Page Language="C#" CodeBehind="BusLogic.aspx.cs" Inherits="Web.BusLogic" %>
2
Jas

Ich stand auch vor dem gleichen Problem. Hier sind zwei Möglichkeiten, mit denen ich es gelöst habe - 1. Wenn Sie ein Framework verwenden, stellen Sie sicher, dass Sie auch mit dem Aufruf von ajax ein CSRF-Token senden Hier wird die Syntax für laravel aussehen -

<meta name="_token" content="{{ csrf_token() }}">

Stellen Sie sicher, dass Sie dies in Ihrer js-Datei aufrufen, bevor Sie den Ajax-Anruf senden

$.ajaxSetup({
            headers: {
                'X_CSRF-TOKEN' : $('meta[name="_token"]').attr('content')
            }
        });
  1. Eine andere Lösung wäre, method von post in get zu ändern.
1
Koushik Das

Ich hatte dieses Problem und fand heraus, dass die serverseitige C # -Methode static 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";
    }
}
1
Apex ND

Wenn Sie das CodeIgniter-Framework mit aktiviertem CSRF-Schutz verwenden, laden Sie 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- und Ajax

1
Kevin Graveman

Die JSON-Daten, die Sie an den Server übergeben, sollten denselben Namen haben, den Sie auf der Clientseite bilden.

var obj = {  Id: $('#CompanyId').val(),
             Name: $("#CompanyName").val()
            };

$.Ajax(data: obj,
url: "home/InsertCompany".....

Wenn der Name anders ist, zB: 

[HttpPost]
public ActionResult InsertCompany(Int32 Id, string WrongName)
{
}

Sie erhalten diesen Fehler.

Wenn Sie die Daten nicht übergeben, entfernen Sie das Datenattribut aus der Anforderung AJAX.

1

Ich habe festgestellt, dass dies in Chrome vorgekommen ist, als ich zwei Ajax-Abfragen in dem JQuery-Handler on load ausführte, d. H.

Ich habe es vermieden mit:

setTimeout(function_to_do_2nd_ajax_request, 1);

es handelt sich vermutlich um einen Chrom- und/oder Jquery-Fehler

1
Sam Watkins

Für mich war der Fehler in der PHP-Datei, an die ich die Anfrage gesendet habe. Der Fehler war in der Datenbankverbindung. Nach der Korrektur des PHP-Codes wurde der Fehler behoben.

1
J4GD33P 51NGH

Wie bereits erwähnt, sind Ihre Rückgabedaten sehr lang. Das JSON-Format wurde also 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>
1
Emad Armoun

Ich hatte dieses Problem, weil die Seite, von der aus ich ajax post aufgerufen hatte, EnableViewState = "false" und EnableViewStateMac = "false" hatte. Wenn ich das auf beiden Seiten stelle, fing alles an zu arbeiten. Ich habe dies vermutet, als ich eine Ausnahme für die MAC-Adresse sah.

1
user1228608

Ich bin spät dran, aber ich hatte dieses Problem, und ich habe festgestellt, dass es sich um einen Fehler in meinem PHP -Code handelt (in meinem Fall die Syntax eines select to the db). Normalerweise ist dieser Fehler 500 etwas mit Syntax - meiner Erfahrung nach. In anderen Worten: "Peopleware" -Ausgabe! : D

0
ArtFranco

Wenn die von Ihnen ausgeführte Abfrage ein Objekt oder etwas zurückgibt, das die Serialisierung der Daten verhindert, wird zusätzlich zur "fehlerhaften JSON" -Antwort 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.

0
GidiBloke

Ihr Code enthält den Datentyp: json .

In diesem Fall wertet jQuery die Antwort als JSON aus und gibt ein JavaScript-Objekt zurück. DieJSON- Daten werden streng analysiert. Jedes fehlerhafteJSONwird abgelehnt und ein Parser-Fehler wird ausgegeben. Eine leere Antwort wird ebenfalls abgelehnt.

Der Server sollte stattdessen eine Antwort von null oder {} zurückgeben.

0
Subhash Diwakar

Ihre Rückgabedaten können sehr lang sein.

<system.web>        
   <compilation debug="true" targetFramework="4.0" />
   <httpRuntime maxRequestLength="2147483647" />
</system.web>

Zum Beispiel:  

  • 1 Zeichen = 1 Byte 
  • 5 Zeichen = 5 Byte
  • "Hakki" = 5 Byte
0
Hakkı Eser

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.

0
Jack Fairfield

Ich hatte ähnliche Probleme mit AJAX - Code, der sporadisch den "500 internen Serverfehler" zurückgibt. Ich habe das Problem durch Erhöhen der Werte für "fastCGI", "RequestTimeout" und "ActivityTimeout" gelöst.

0
Steven Chinman