wake-up-neo.net

Ajax - 500 Interner Serverfehler

Ich versuche bei der Arbeit AJAX für dieses Projekt zu lernen. Ich habe eine Website, auf der Medikamente geladen werden, die ein Patient einnimmt.

Ich nenne diese Funktion AJAX rekursiv, sodass eine neue Tabelle mit einer einzelnen Medikation und einem Verlauf von 7 Tagen angehängt wird. Ich habe Probleme, den Code in FF und IE auszuführen. Funktioniert perfekt in Chrom. Ich hatte Warnungen, die den xmlhttp.status anzeigen, und das ist, was ich bekam:

xmlhttp.status == 500 (interner Server Fehler).

Ich habe alle meine Rekursion auskommentiert, so dass ich mich auf dieses Stück Code beschränken kann. (x verfolgt die Anzahl der Medikamente, damit ich weiß, wann ich aufhören muss) 

function LoadMeds()


  if ( x == MaxMedCount )
  {
      document.getElementById("the_day").value = parseInt(document.getElementById("the_day").value)+7; 
  }
  if ( x == (MaxMedCount - 1) )
  {
      document.getElementById("x").value = x + 1;
      show();
  }
  else
  { 

      if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
      }
      else
      {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
      xmlhttp.onreadystatechange=function()
      {
          try 
          {      
              if (xmlhttp.readyState==4 && xmlhttp.status==200)
              {     
                  var div = document.createElement('div');
                  div.innerHTML= xmlhttp.responseText;
                  document.getElementById('MedTable').appendChild(div);
                  document.getElementById("the_med_").value = the_med_;

              }

          }
          catch(e)
          {
              alert("Error");  
          }
      }
      xmlhttp.open("GET","URL with variables passed",true);
      xmlhttp.send();     
      document.getElementById("x").value = x + 1;
  } 

wenn mehr Code benötigt wird, lass es mich wissen.

25
NickF

Die 500 (internal server error) bedeutet, dass auf der Seite des Servers ein Fehler aufgetreten ist. Es könnte mehrere Dinge geben, aber ich würde zunächst überprüfen, ob die URL und die Parameter korrekt sind. Stellen Sie außerdem sicher, dass das, was die Anforderung behandelt, die Anforderung als GET und nicht als POST erwartet.

Eine nützliche Methode, um mehr über die Vorgänge zu erfahren, ist die Verwendung eines Tools wie Fiddler , mit dem Sie alle HTTP-Anforderungen und -Antworten beobachten können, sodass Sie genau sehen können, was Sie senden und der Server damit reagiert.

Wenn Sie keinen zwingenden Grund haben, Ihren eigenen Ajax-Code zu schreiben, wäre es besser, wenn Sie eine Bibliothek verwenden, die die Ajax-Interaktionen für Sie erledigt. jQuery ist eine Option.

50
Jonathon Faust

Ich denke, Ihre Rückgabedaten sind sehr lang. Das JSON-Format wurde also beschädigt. Sie sollten die maximale Größe für JSON-Daten auf folgende Weise ä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>
10
Emad Armoun

Dies kann ein falscher Parameter für Ihren SOAP - Aufruf sein. Schauen Sie sich das Format der Parameter im Abschnitt 'data:' json an. Dies ist die Nutzlast, die Sie übergeben. Parameter und Daten werden im JSON-Format umschlossen.

Die Debugging-Symbolleiste von Google Chrome enthält einige nützliche Tools zum Überprüfen von Parametern und zum Anzeigen von Fehlernachrichten. Starten Sie beispielsweise die Registerkarte "Konsole" und klicken Sie auf die URL, deren Fehler angezeigt werden, oder klicken Sie auf die Registerkarte "Netzwerk". Sie möchten die Kopfzeilen der Nachricht, die Antwort usw. anzeigen.

6
user14114

Kommentieren Sie die folgende Zeile: [System.Web.Script.Services.ScriptService]

Der Service wird gut funktionieren. 

[WebService(Namespace = "http://tempuri.org/")]


 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]


Um zuzulassen, dass dieser Web Service von Skript aufgerufen wird, verwenden Sie ASP.NET. AJAX, kommentieren Sie die folgende Zeile.

[System.Web.Script.Services.ScriptService]

public class WebService : System.Web.Services.WebService 
{
2
Nadir Siddiqui

Hatte dasselbe Problem, dann erinnerte ich mich daran, dass aus Sicherheitsgründen ASP nicht den gesamten Fehler oder Stack-Trace beim Remote-Zugriff auf Ihre Site/Ihren Service offenlegt, genau so, als wenn Sie keinen .asmx-Web-Service remote testen könnten Ich entfernte mich auf den Server und überwachte meine Entwicklungstools, und erst dann erhielt ich die berüchtigte Nachricht "Datei oder Assembly 'Newtonsoft.Json, Version=3.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' oder einer ihrer dep ... konnte nicht geladen werden".

Also melden Sie sich auf dem Server an und debuggen Sie von dort aus.

1
user2351772

Man muss behavior: JsonRequestBehavior.AllowGet in Post Json Return in C # verwenden

0
Muhammad Yasir

Ich habe einen Fehler wie diesen behoben, der die Position der Routen in routen.php verändert hat. Ich hatte zum Beispiel so etwas:

Route::resource('Mensajes', 'MensajeriaController');
Route::get('Mensajes/modificar', '[email protected]');

und dann sage ich es so:

Route::get('Mensajes/modificar', '[email protected]');
Route::resource('Mensajes', 'MensajeriaController');
0
Jennifervdz

Ich hatte den gleichen Fehler. Es stellte sich heraus, dass die Ursache war, dass die Back-End-Methode andere Json-Daten erwartete. In meinem Ajax-Anruf hatte ich so etwas:

$.ajax({
        async: false,
        type: "POST",
        url: "http://13.82.13.196/api.aspx/PostAjax",
        data: '{"url":"test"}',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
    });

Jetzt in meinem WebMethod, in meinem C # -Backend-Code, hatte ich meinen Endpunkt folgendermaßen erklärt:

public static string PostAjax(AjaxSettings settings)

Wo AjaxSettings deklariert wurde:

public class AjaxSettings
{
    public string url { get; set; }
}

Das Problem war dann, dass die Zuordnung zwischen meinem Ajax-Aufruf und meinem Backend-Endpunkt nicht identisch war. Sobald ich meinen Ajax-Aufruf folgendermaßen geändert habe, hat alles gut funktioniert!

var data ='{"url":"test"}';    
$.ajax({
    async: false,
    type: "POST",
    url: "http://13.82.13.196/api.aspx/PostAjax",
    data: '{"settings":'+data+'}',
    contentType: "application/json; charset=utf-8",
    dataType: "json"
});

Ich musste die Datenvariable im Ajax-Aufruf ändern, um die Methodensignatur genau abzugleichen.

0