Результаты в jQuery Аякс пост в 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'}
26 64

26 ответов:

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

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

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

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

 type:'POST'

Это Ajax запрос простой код для извлечения данных через 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");
    }
});

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

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

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

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

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

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

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

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

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

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

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

Это было решено в клиентской сети.конфигурации

<appSettings>
    <add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
запрос еще не удалось. Но на этот раз с другой ошибкой, которую я теперь смог отладить на стороне сервера

"слишком большой объект запроса"

Это был устранено путем добавления в веб-службу следующего.конфигурации

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

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

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

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

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

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

но я могу сказать вам, что "500 internal server error" - это ошибка с сервером, а не с клиентом, у вас есть ошибка в скрипте на стороне сервера. Закомментируйте закрытие кода по закрытию и попробуйте запустить его снова, вы скоро узнаете, что где-то пропустили символ.

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

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

кроме того, я получаю то же сообщение об ошибке, возможно по другой причине. Мой YSOD говорил о словаре, не содержащем значения для ненулевого значения. Способ, которым я получил информацию 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
        });

};

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

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

используя Т. е. я пошел в меню просмотра - > отладчик скриптов - > перерыв в следующем операторе. Затем пошел, чтобы вызвать код, который запустил бы мой пост. Обычно это приводило меня куда-то глубоко в библиотеку jQuery, а не туда, где я хотел, потому что выпадающее открытие select запускало jQuery. Поэтому я нажал StepOver, а затем фактическая следующая строка также сломалась, где я хотел быть. Затем VS переходит в клиентский (динамический) режим для этой страницы, и я помещаю перерыв на $("#install") строки, чтобы я мог видеть (с помощью мыши отладка) что было в запросе, textStatus, errorThrown. запрос. По запросу.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>

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

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

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

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

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

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

в моем случае это был простой вопрос, но трудно найти. Директива Page неправильно наследует атрибуты. Это просто нужно включить верхний уровень, и это сработало.

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

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

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

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

Я обнаружил, что это произошло в chrome, когда я сделал два ajax-запроса в обработчике jquery "on load", т. е. как $(function() { $.Аякс. )(.. $.Аякс. )(.. });

я избегал его с помощью:

setTimeout(function_to_do_2nd_ajax_request, 1);

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

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

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

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

источники:https://stackoverflow.com/a/7154317/2539869 и http://jerel.co/blog/2012/03/a-simple-solution-to-codeigniter-csrf-protection-and-ajax

У меня была эта проблема, потому что страница, которую я назвал ajax post, имела EnableViewState="false" и EnableViewStateMac="false", но не вызывала страницу. Когда я поместил это на обеих страницах, все начало работать. Я подозревал это, когда увидел исключение MAC-адреса.

данные JSON, которые вы передаете на сервер, должны иметь то же имя, что и вы формируете на стороне клиента. Например:

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

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

Если имя отличается, например:

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

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

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

у меня была эта проблема, и я узнал, что метод C# на стороне сервера должен быть статический.

Клиентской Стороне:

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

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

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

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

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

я тоже столкнулся с той же проблемой. Вот два способа, с помощью которых я решил это- 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

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

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

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

например:

  • 1 Символ = 1 Байт
  • 5 Char = 5 Байт
  • "Хакки" = 5 Байт

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

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