Внутренняя Ошибка Сервера Ajax - 500

Я пытаюсь изучить AJAX для этого проекта на работе. У меня есть сайт, который загружает лекарства, которые принимает пациент.

Я вызываю эту функцию AJAX рекурсивно, чтобы она добавила новую таблицу, содержащую одно лекарство и 7 Дней истории. У меня возникли проблемы с получением кода для выполнения в FF и IE. Отлично работает в Chrome. У меня были предупреждения, отображающие xmlhttp.статус и вот что я получил:

xmlhttp.статус==500 (внутренняя сервер ошибка.)

Я прокомментировал всю мою рекурсию, поэтому она сузилась до этого tid-бит кода. (x отслеживает количество лекарств, поэтому я знаю, когда остановиться)

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;
  } 

если требуется больше кода, просто дайте мне знать.

8 ответов


на 500 (internal server error) значит что-то пошло не так на стороне сервера. Это может быть несколько вещей, но я бы начал с проверки правильности URL и параметров. Кроме того, убедитесь, что все, что обрабатывает запрос, ожидает запрос как GET, а не POST.

один полезный способ узнать больше о том, что происходит, - использовать такой инструмент, как Саша который позволит вам смотреть все HTTP-запросы и ответы, чтобы вы могли точно видеть, что вы отправляете и сервер отвечает.

Если у вас нет веской причины писать свой собственный код Ajax, вам будет намного лучше использовать библиотеку, которая обрабатывает взаимодействия Ajax для вас. jQuery является одним из вариантов.


Я думаю, что ваши данные строки возврата очень длинные. таким образом, формат JSON был поврежден. Вы должны изменить максимальный размер данных JSON следующим образом:

откройте веб.Файл конфигурации и вставьте эти строки в раздел конфигурации

<system.web.extensions>
  <scripting>
    <webServices>
      <jsonSerialization maxJsonLength="50000000"/>
    </webServices>
  </scripting>
</system.web.extensions>

Это может быть неправильный параметр для вашего вызова SOAP; посмотрите на формат параметра (ов) в разделе "данные:" json - это полезная нагрузка, которую вы передаете - параметр и данные, завернутые в формат JSON.

панель инструментов отладки Google Chrome имеет некоторые хорошие инструменты для проверки параметров и просмотра сообщений об ошибках - например, начните с вкладки консоли и нажмите на URL, который ошибки или нажмите на вкладку Сеть. Вы захотите просмотреть заголовки сообщения, ответ так далее...


раскомментируйте следующую строку : [System.Web.Script.Services.ScriptService]

сервис начнет работать нормально.

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


 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]


чтобы разрешить вызов этой веб-службы из скрипта, используя ASP.NET AJAX, раскомментируйте следующую строку.

[System.Web.Script.Services.ScriptService]

public class WebService : System.Web.Services.WebService 
{

была та же проблема, затем я вспомнил, что по соображениям безопасности ASP не раскрывает всю ошибку или трассировку стека при удаленном доступе к вашему сайту/сервису, так же, как не может протестировать .asmx веб-сервис удаленно, поэтому я перешел в sever и контролировал свои инструменты dev, и только тогда я получил пресловутое сообщение "не удалось загрузить файл или сборку 'Newtonsoft.Json, Version=3.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' или один из его dep...".

Итак, войдите на сервер и отладьте оттуда.


я исправил ошибку, как это изменение места маршруты в маршруты.PHP, например у меня было что-то вроде этого:

Route::resource('Mensajes', 'MensajeriaController');
Route::get('Mensajes/modificar', 'MensajeriaController@modificarEstado');

и тогда я сделал так:

Route::get('Mensajes/modificar', 'MensajeriaController@modificarEstado');
Route::resource('Mensajes', 'MensajeriaController');

у меня была такая же ошибка. Оказывается, причиной было то, что метод back end ожидал разные данные json. В моем вызове Ajax у меня было что-то вроде этого:

$.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",
    });

теперь в моем WebMethod, внутри моего кода бэкэнда C# я объявил свою конечную точку следующим образом:

public static string PostAjax(AjaxSettings settings)

где AjaxSettings было объявлено:

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

проблема заключалась в том, что сопоставление между моим вызовом ajax и моей конечной точкой не было одинаковым. Как только я изменил свой ajax звоните следующим, все получилось хорошо!

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

мне пришлось изменить переменную данных внутри вызова Ajax, чтобы точно соответствовать сигнатуре метода.


нужно использовать behavior: JsonRequestBehavior.AllowGet в должности Json Return в C#