JQuery Ajax Post приводит к 500 внутренняя ошибка сервера - PullRequest
71 голосов
/ 29 августа 2009

Я пытаюсь выполнить эту запись 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'}

Ответы [ 28 ]

3 голосов
/ 07 февраля 2011

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

Но я могу сказать, что «500 внутренняя ошибка сервера» - это ошибка сервера, а не клиента, вы получили ошибку в сценарии на стороне сервера. Закомментируйте закрытие кода закрытием и попробуйте запустить его снова, вы скоро обнаружите, что пропустили где-то символ.

2 голосов
/ 15 июля 2014

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

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

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

2 голосов
/ 11 июля 2012

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

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

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

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

<%@ Page Language="C#" CodeBehind="BusLogic.aspx.cs" Inherits="Web.BusLogic" %>
2 голосов
/ 04 сентября 2011

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

Я «исправил» это, поместив ajax.php в каталог (поэтому .htaccess не повлиял).

2 голосов
/ 17 февраля 2010

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

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

Используя IE, я пошел, чтобы просмотреть меню -> скрипт отладчика -> перерыв при следующем утверждении. Затем пошел, чтобы вызвать код, который будет запускать мой пост. Это обычно приводило меня куда-то вглубь библиотеки jQuery, а не туда, куда я хотел, потому что раскрывающееся меню открытия вызывало 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>

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

1 голос
/ 23 марта 2015

У меня была эта проблема, и я обнаружил, что метод C # на стороне сервера должен быть 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";
    }
}
1 голос
/ 11 января 2014

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

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

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

Если имя другое, например:

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

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

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

1 голос
/ 08 июля 2013

При использовании платформы CodeIgniter с включенной защитой CSRF загрузите следующий скрипт на каждой странице, где может возникнуть 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

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

1 голос
/ 15 февраля 2013

Я обнаружил, что это произошло в chrome, когда я выполнил два ajax-запроса в обработчике jquery 'on load', например: ;

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

setTimeout(function_to_do_2nd_ajax_request, 1);

это, вероятно, ошибка Chrome и / или JQuery

1 голос
/ 23 мая 2015

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

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

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

<system.web.extensions>
  <scripting>
    <webServices>
      <jsonSerialization maxJsonLength="50000000"/>
    </webServices>
  </scripting>
</system.web.extensions>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...