JQuery Ajax Post приводит к ошибке 500 внутренних серверов

Я пытаюсь выполнить эту запись AJAX, но по какой-то причине я получаю ошибку сервера 500. Я вижу, что это хит точки останова в контроллере. Таким образом, проблема, кажется, на обратном вызове. Кто-нибудь?

$.ajax({
    type: "POST",
    url: "InlineNotes/Note.ashx?id=" + noteid,
    data: "{}",
    dataType: "json",

    success: function(data) {
        alert(data[1]);
    },
    error: function(data){
        alert("fail");
    }
});

Это строка, которая должна быть возвращена:

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

Ответ 1

Я подозреваю, что серверный метод бросает исключение после прохождения точки останова. Используйте Firefox/Firebug или инструменты разработчика IE8, чтобы посмотреть на фактический ответ, который вы получаете с сервера. Если возникло исключение, вы получите YSOD html, который поможет вам понять, где искать.

Еще одно: ваше свойство данных должно быть {} not "{}", первый - пустой объект, а последний - строка, которая является недопустимой как параметр запроса. Еще лучше, просто оставьте это, если вы не передаете какие-либо данные.

Ответ 2

если кто-то использует фреймворк codeigniter, проблема может быть вызвана включенной конфигурацией защиты csrf.

Ответ 3

У меня была сама проблема, хотя я не мог найти причину этого в моем случае при изменении от POST до GET ошибка 500 проблемы исчезла!

 type:'POST'

Ответ 4

Это простой запрос Ajax Request для получения данных через запрос Ajax

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

Ответ 5

Вы можете найти коды состояния HTTP здесь (или здесь), эта ошибка говорит вам:

"Сервер столкнулся с неожиданным условием, которое помешало ему выполнить запрос".

Вам нужно отладить ваш сервер.

Ответ 6

Я испытал подобную сложную ошибку, которая требовала двух решений. В моем случае стек технологий был MVC/ASP.NET/IIS/JQuery. На стороне сервера произошел сбой с ошибкой 500, и это произошло до того, как запрос обработался контроллером, что затрудняет отладку на стороне сервера.

Следующая отладка на стороне клиента позволила мне определить ошибку сервера

В обратном вызове $.ajax отобразите подробные сведения об ошибке на консоли

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

Это, по крайней мере, позволило мне просмотреть начальную ошибку сервера

"Запрос JSON был слишком большим для сериализации"

Это было разрешено в клиенте web.config

<appSettings>
    <add key="aspnet:MaxJsonDeserializerMembers" value="150000" />

Однако запрос еще не удался. Но на этот раз с другой ошибкой, которую я теперь мог отлаживать на стороне сервера

"Request Entity слишком большой"

Это было разрешено путем добавления следующего к сервису web.config

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

Значения конфигурации могут потребовать дополнительной настройки, но, по крайней мере, они разрешили ошибки сервера, вызванные сообщением ajax.

Ответ 7

Сегодня я сталкиваюсь с тем же. Как было предложено, прежде чем запускать Firebug для Firefox, включить консоль и просмотреть ответ POST. Это помогло мне выяснить, насколько глупой была проблема. Мое действие ожидало значения типа int, и я отправлял строку. (ASP.NET MVC2)

Ответ 8

В EventVwr (Предупреждение от asp.net) должно быть зарегистрировано событие, которое может предоставить вам более подробную информацию о том, где может быть ошибка.

Ответ 9

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

Я предлагаю вам приложить отладчик к процессу веб-сервера (при условии, что у вас есть доступ).

Одна странная вещь: вы делаете запрос POST на сервер, но вы не передаете никаких данных (все в строке запроса). Возможно, это должен быть запрос GET?

Вы также должны проверить правильность URL-адреса.

Ответ 10

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

Но я могу сказать, что "ошибка внутреннего сервера 500" - это ошибка с сервером, а не с клиентом, вы получили ошибку на стороне сервера script. Прокомментируйте закрытие кода закрытием и попробуйте запустить его снова, вы скоро узнаете, что вам не хватает персонажа.

Ответ 11

Вы также можете получить эту ошибку в VB, если вызываемая вами функция начинается с Public Shared Function, а не Public Function в веб-сервисе. (Как может случиться, если вы переместите или скопируйте функцию из класса). Еще одна вещь, на которую нужно следить.

Ответ 12

Можете ли вы опубликовать подпись своего метода, который должен принять этот пост?

Кроме того, я получаю такое же сообщение об ошибке, возможно, по другой причине. Мой YSOD рассказывал о словаре, не содержащем значения для значения, не имеющего значения NULL. То, как я получил информацию YSOD, заключалось в том, чтобы поставить точку останова в функцию $.ajax, которая обрабатывала ошибку, как показано ниже:

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

};

Тогда мой javascript errorFunc выглядит так:

function(request, textStatus, errorThrown) {
        $("#install").text("Error doing auto-installer search, proceed with ticket submission\n"
        +request.statusText); }

Используя IE, я отправился в меню просмотра → script отладчик → перерыв в следующей инструкции. Затем отправился запускать код, который запустил бы мой пост. Обычно это меня куда-то глубоко внутри библиотеки jQuery, а не там, где я хотел, потому что в раскрывающемся меню select вызывается jQuery. Таким образом, я нажимаю StepOver, тогда и следующая следующая строка также сломается, и именно там я и хотел быть. Затем VS переходит в режим клиентской стороны (динамический) для этой страницы, и я вложил разрыв в строку $("#install"), чтобы я мог видеть (используя мышь над отладкой) то, что было в запросе, textStatus, errorThrown. запрос. В request.ResponseText появилось сообщение html, где я увидел:

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

так что проверьте все это и опубликуйте подпись своего контроллера в случае, если часть проблемы

Ответ 13

Я обнаружил, что имею эту ошибку. У меня был перенаправлен перенаправление .htaccess в каталог. Ну, он перенаправляет аякс-призывы к курению ($.post(../ajax.php)), поэтому он не смог найти фактический файл (приводя к ошибке 500).

Я "исправил" его, поместив ajax.php в каталог (So .htaccess не повлиял).

Ответ 14

В моем случае это была простая проблема, но ее было сложно найти. У указателя страницы были неправильные атрибуты Inherits. Просто нужно включить верхний уровень, и это сработало.

Неверный код

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

Правильный код

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

Ответ 15

Я смог найти решение, используя отладчик Chrome (у меня нет Firebug или других сторонних инструментов)

  • Перейдите на вкладку разработчика (CTRL + MAJ + I)
  • Сеть > щелкните по неудачному запросу, в красном > Предварительный просмотр

Он показал мне, что у меня была проблема на сервере, когда я возвращал значение, которое было саморегуляцией.

Ответ 16

Я обнаружил, что это произошло в chrome, когда я сделал два ajax-запроса в обработчике jquery "при загрузке",

то есть как $(function() { $.ajax() ... $.ajax() ... });

Я избежал этого, используя:

setTimeout(function_to_do_2nd_ajax_request, 1);

это предположительно ошибка Chrome и/или JQuery

Ответ 17

При использовании инфраструктуры CodeIgniter с включенной защитой CSRF загрузите следующую script на каждую страницу, где может произойти ajax POST:

$(function(){
    $.ajaxSetup({
        data: {
            <?php echo $this->config->item('csrf_token_name'); ?>: $.cookie('<?php echo $this->config->item('csrf_cookie_name'); ?>')
        }
    });
});

Требуется: jQuery и плагин jQuery.cookie

Источники: fooobar.com/questions/90798/... и http://jerel.co/blog/2012/03/a-simple-solution-to-codeigniter-csrf-protection-and-ajax

Ответ 18

У меня была эта проблема, потому что на странице, с которой я назвал пост ajax, были EnableViewState="false" и EnableViewStateMac="false", но не была названная страница.

Когда я разместил это на обеих страницах, все начало работать. Я подозревал это, когда увидел исключение MAC-адреса.

Ответ 19

Данные JSON, которые вы передаете на сервер, должны иметь то же имя, что и на клиентской стороне. Пример:

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

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

Если имя отличается, ex:

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

Вы получите эту ошибку.

Если вы не передаете данные, удалите атрибут данных из запроса AJAX.

Ответ 20

У меня была эта проблема, и выяснилось, что метод С# на стороне сервера должен быть static.

Сторона клиента:

$.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) {

        }

Сторона сервера:

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

Ответ 21

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

Там другой путь для этой проблемы. Вы должны изменить максимальный размер для данных JSON таким образом:

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

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

Ответ 22

Я также столкнулся с той же проблемой. Вот два способа, которыми я решил это - 1. Если вы используете какую-либо фреймворк, убедитесь, что вы также отправляете токен CSRF с вызовом ajax Вот как синтаксис будет выглядеть для laravel -

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

В вашем js файле обязательно вызовите это перед отправкой вызова ajax

$.ajaxSetup({
            headers: {
                'X_CSRF-TOKEN' : $('meta[name="_token"]').attr('content')
            }
        });
  1. Другим способом его решения было бы изменить method от post до get

Ответ 23

Для меня ошибка была в php файле, в который я отправлял запрос. Ошибка была в соединении базы данных. После исправления кода php ошибка устранена.

Ответ 24

Ваш код содержит dataType: json.

В этом случае jQuery оценивает ответ как JSON и возвращает объект JavaScript. Данные JSON анализируются строго. Любой искаженный JSON отклоняется и выдается ошибка разбора. Пустой ответ также отклоняется.

Сервер должен вернуть ответ null или {}.

Ответ 25

Данные возвращаемой строки могут быть очень длинными.

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

Например:

  • 1 Char= 1 Байт
  • 5 Char= 5 байт
  • "Hakki" = 5 байт

Ответ 26

И это моя версия:

$.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(jqXHR, textStatus, errorThrown){
                                 alert('Error: '+ errorThrown);
                     }
});

Ответ 27

Используйте блок Try Catch на вашей стороне сервера, а в блоке catch выведете ошибку исключения клиенту. Это должно дать вам полезное сообщение об ошибке.

Ответ 28

У меня были аналогичные проблемы с кодом AJAX, который спорадически возвращает "внутреннюю ошибку сервера 500". Я решил проблему, увеличив значения "RequestTimeout" и "ActivityTimeout" "fastCGI".

Ответ 29

В моем случае проблема была вызвана нарушением ограничения целостности в таблице базы данных (дубликат записи).

Ответ 30

Я опаздываю на это, но у меня возникла эта проблема, и я узнал, что это была ошибка в моем PHP-коде (в моем случае синтаксис выбора для БД). Обычно эта ошибка 500 связана с использованием синтаксиса - по моему опыту. Другими словами: проблема "кадрового обеспечения"!: D