Ajax - 500 Внутренняя ошибка сервера - PullRequest
25 голосов
/ 25 января 2011

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

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

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

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

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 ]

50 голосов
/ 25 января 2011

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

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

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

11 голосов
/ 23 мая 2015

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

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

<system.web.extensions>
  <scripting>
    <webServices>
      <jsonSerialization maxJsonLength="50000000"/>
    </webServices>
  </scripting>
</system.web.extensions>
6 голосов
/ 19 февраля 2014

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

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

2 голосов
/ 10 июня 2014

Раскомментируйте следующую строку: [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 
{
1 голос
/ 27 марта 2015

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

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

0 голосов
/ 11 апреля 2018

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

0 голосов
/ 04 апреля 2018

У меня была такая же ошибка.Оказывается, причина была в том, что бэкэнд-метод ожидал разные данные 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, чтобы точно соответствовать сигнатуре метода.

0 голосов
/ 17 февраля 2018

Я исправил такую ​​ошибку, когда менял места маршрутов в маршрутах. Например, у меня было что-то вроде этого:

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

и тогда я скажу это так:

Route::get('Mensajes/modificar', 'MensajeriaController@modificarEstado');
Route::resource('Mensajes', 'MensajeriaController');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...