Próbuję wykonać ten post AJAX, ale z jakiegoś powodu otrzymuję błąd 500 serwera. Widzę, że uderzył w punkty przerwania w kontrolerze. Wydaje się, że problem dotyczy oddzwaniania. Ktoś?
$.ajax({
type: "POST",
url: "InlineNotes/Note.ashx?id=" + noteid,
data: "{}",
dataType: "json",
success: function(data) {
alert(data[1]);
},
error: function(data){
alert("fail");
}
});
Oto ciąg, który powinien zostać zwrócony:
{status:'200', text: 'Something'}
javascript
jquery
ajax
Nacięcie
źródło
źródło
Odpowiedzi:
Podejrzewam, że metoda serwera zgłasza wyjątek po przejściu przez punkt przerwania. Użyj przeglądarki Firefox / Firebug lub narzędzi programistycznych IE8, aby sprawdzić rzeczywistą odpowiedź, jaką otrzymujesz z serwera. Jeśli wystąpił wyjątek, otrzymasz YSOD html, który powinien pomóc Ci dowiedzieć się, gdzie szukać.
Jeszcze jedno - właściwość danych powinna mieć wartość {} nie "{}", pierwsza jest pustym obiektem, a druga jest ciągiem, który jest nieprawidłowy jako parametr zapytania. Jeszcze lepiej, po prostu pomiń to, jeśli nie przekazujesz żadnych danych.
źródło
w przypadku, gdy ktoś używa frameworka codeigniter, problem może być spowodowany włączoną konfiguracją ochrony csrf.
źródło
Właśnie miał ten problem samodzielnie, chociaż nie mogłem znaleźć przyczynę tego w moim przypadku, gdy zmienia się od
POST
celuGET
, błąd 500 Problem zniknął!type:'POST'
źródło
To jest prosty kod żądania Ajax do pobierania danych za pośrednictwem żądania 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"); } });
źródło
Wystąpił podobny błąd złożony, który wymagał dwóch rozwiązań. W moim przypadku stosem technologii był MVC / ASP.NET / IIS / JQuery. Po stronie serwera wystąpił błąd 500, co miało miejsce, zanim żądanie zostało obsłużone przez kontroler, co utrudniło debugowanie po stronie serwera.
Następujące debugowanie po stronie klienta umożliwiło mi określenie błędu serwera
W wywołaniu zwrotnym błędu $ .ajax wyświetl szczegóły błędu na konsoli
error: (error) => { console.log(JSON.stringify(error)); }
To przynajmniej pozwoliło mi zobaczyć początkowy błąd serwera
„Żądanie JSON było zbyt duże, aby można było go serializować”
Zostało to rozwiązane w pliku web.config klienta
<appSettings> <add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
Jednak żądanie nadal nie powiodło się. Ale tym razem z innym błędem, który mogłem teraz debugować po stronie serwera
"Wymagana jednostka jest za duża"
Zostało to rozwiązane przez dodanie następujących elementów do usługi 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>
Wartości konfiguracyjne mogą wymagać dalszego dostrojenia, ale przynajmniej rozwiązało to błędy serwera spowodowane przez post ajax.
źródło
Możesz sprawdzić kody stanu HTTP tutaj (lub tutaj ), ten błąd mówi ci:
„Serwer napotkał nieoczekiwany stan, który uniemożliwił mu realizację żądania”.
Musisz debugować swój serwer.
źródło
Dziś napotykam to samo. Jak sugerowano wcześniej, pobierz Firebug dla Firefoksa, włącz konsolę i wyświetl podgląd odpowiedzi POST. To pomogło mi dowiedzieć się, jak głupi był problem. Moja akcja oczekiwała wartości typu int i wysyłałem string. (ASP.NET MVC2)
źródło
Powinno zostać zarejestrowane zdarzenie w EventVwr (ostrzeżenie z asp.net), które może dostarczyć więcej szczegółowych informacji na temat miejsca wystąpienia błędu.
źródło
500 z ASP.NET prawdopodobnie oznacza, że w pewnym momencie podczas obsługi żądania został zgłoszony nieobsługiwany wyjątek.
Proponuję dołączyć debugger do procesu serwera WWW (zakładając, że masz dostęp).
Jedna dziwna rzecz: wysyłasz żądanie POST do serwera, ale nie przekazujesz żadnych danych (wszystko jest w ciągu zapytania). Może zamiast tego powinno to być żądanie GET?
Powinieneś również dokładnie sprawdzić, czy adres URL jest poprawny.
źródło
Właśnie dzisiaj mam do czynienia z tym problemem. przy tego rodzaju błędach nie otrzymasz odpowiedzi z serwera, dlatego bardzo trudno jest zlokalizować problem.
Ale mogę ci powiedzieć, że "500 wewnętrzny błąd serwera" to błąd z serwerem, a nie klientem, masz błąd w skrypcie po stronie serwera. Zakomentuj zamknięcie kodu przez zamknięcie i spróbuj uruchomić go ponownie, wkrótce przekonasz się, że gdzieś tęsknisz za jakąś postacią.
źródło
Możesz również otrzymać ten błąd w VB, jeśli wywoływana funkcja zaczyna się od Public Shared Function zamiast Public Function w usłudze sieciowej. (Jak może się zdarzyć, jeśli przeniesiesz lub skopiujesz funkcję z klasy). Kolejna rzecz, na którą trzeba uważać.
źródło
Czy możesz wysłać podpis swojej metody, która ma akceptować ten post?
Dodatkowo otrzymuję ten sam komunikat o błędzie, prawdopodobnie z innego powodu. Mój YSOD mówił o słowniku nie zawierającym wartości dla wartości nie dopuszczającej wartości null. Sposób, w jaki otrzymałem informacje YSOD, polegał na umieszczeniu punktu przerwania w funkcji $ .ajax, która obsługiwała zwrot błędu w następujący sposób:
<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 }); };
Wtedy mój errorFunc javascript wygląda tak:
function(request, textStatus, errorThrown) { $("#install").text("Error doing auto-installer search, proceed with ticket submission\n" +request.statusText); }
Używając IE poszedłem do menu widoku -> debugger skryptów -> przerwa przy następnej instrukcji. Następnie poszedłem uruchomić kod, który uruchomiłby mój post. Zwykle przenosiło mnie to gdzieś głęboko w bibliotekę jQuery zamiast tam, gdzie chciałem, ponieważ otwieranie listy rozwijanej wyboru wyzwoliło jQuery. Więc uderzyłem w StepOver, wtedy następna linia również się zepsuła, i właśnie tam chciałem być. Następnie VS przechodzi w tryb po stronie klienta (dynamiczny) dla tej strony i
$("#install")
wstawiłem przerwę w wierszu, aby zobaczyć (używając myszy nad debugowaniem), co było w żądaniu, status tekstu, błądThrown. żądanie. W request.ResponseText pojawił się komunikat html, w którym zobaczyłem:<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>
więc sprawdź to wszystko i opublikuj swój podpis metody kontrolera na wypadek, gdyby to część problemu
źródło
Znalazłem się mając ten błąd do. Miałem przekierowanie .htaccess skonfigurowane w katalogu. Cóż, przekierowuje wywołania ajax do ofcourse (
$.post(../ajax.php)
), więc nie może znaleźć właściwego pliku (co powoduje błąd 500).Naprawiłem to poprzez umieszczenie pliku ajax.php w katalogu (więc
.htaccess
nie miało to wpływu).źródło
Udało mi się znaleźć rozwiązanie za pomocą debugera Chrome (nie mam zainstalowanego Firebuga ani innych narzędzi innych firm)
Pokazał mi, że mam problem na serwerze, kiedy zwracałem wartość, która odwoływała się do siebie.
źródło
W moim przypadku była to prosta sprawa, ale trudna do znalezienia. Dyrektywa Page zawierała nieprawidłowe atrybuty Inherits. Wystarczy uwzględnić najwyższy poziom i zadziałało.
Niepoprawny kod
<%@ Page Language="C#" CodeBehind="BusLogic.aspx.cs" Inherits="BusLogic"%>
Prawidłowy kod
<%@ Page Language="C#" CodeBehind="BusLogic.aspx.cs" Inherits="Web.BusLogic" %>
źródło
Korzystając z frameworku CodeIgniter z włączoną ochroną CSRF, załaduj następujący skrypt na każdej stronie, na której może się zdarzyć ajax POST:
$(function(){ $.ajaxSetup({ data: { <?php echo $this->config->item('csrf_token_name'); ?>: $.cookie('<?php echo $this->config->item('csrf_cookie_name'); ?>') } }); });
Wymaga: wtyczki jQuery i jQuery.cookie
Źródła: https://stackoverflow.com/a/7154317/2539869 i http://jerel.co/blog/2012/03/a-simple-solution-to-codeigniter-csrf-protection-and-ajax
źródło
Dane JSON, które przesyłasz do serwera, powinny mieć taką samą nazwę, jaką tworzysz po stronie klienta. Dawny:
var obj = { Id: $('#CompanyId').val(), Name: $("#CompanyName").val() }; $.Ajax(data: obj, url: "home/InsertCompany".....
Jeśli nazwa jest inna, np:
[HttpPost] public ActionResult InsertCompany(Int32 Id, string WrongName) { }
Otrzymasz ten błąd.
Jeśli nie przekazujesz danych, usuń atrybut danych z żądania AJAX.
źródło
Miałem ten problem i odkryłem, że metoda C # po stronie serwera powinna być statyczna .
Strona klienta:
$.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) { }
Po stronie serwera:
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"; } }
źródło
Jak wspomniano, myślę, że dane zwrotne są bardzo długie. więc format JSON został uszkodzony.
Jest inny sposób rozwiązania tego problemu. Powinieneś zmienić maksymalny rozmiar danych JSON w ten sposób:
Otwórz plik Web.Config i wklej te wiersze do sekcji konfiguracji
<system.web.extensions> <scripting> <webServices> <jsonSerialization maxJsonLength="50000000"/> </webServices> </scripting> </system.web.extensions>
źródło
Ja też stanąłem przed tym samym problemem. Oto dwa sposoby rozwiązania tego problemu - 1. Jeśli używasz jakiegoś frameworka, upewnij się, że wysyłasz token CSRF również z wywołaniem ajax. Oto jak będzie wyglądać składnia laravel -
<meta name="_token" content="{{ csrf_token() }}">
W swoim pliku js upewnij się, że wywołałeś to przed wysłaniem wywołania Ajax
$.ajaxSetup({ headers: { 'X_CSRF-TOKEN' : $('meta[name="_token"]').attr('content') } });
method
zpost
naget
źródło
U mnie błąd był w pliku php, do którego wysyłałem żądanie. Wystąpił błąd w łączności z bazą danych. Po naprawieniu kodu php błąd został rozwiązany.
źródło
Twój kod zawiera dataType: json .
W tym przypadku jQuery ocenia odpowiedź jako JSON i zwraca obiekt JavaScript. Dane JSON są analizowane w ścisły sposób. Każdy źle sformułowany kod JSON jest odrzucany i zgłaszany jest błąd analizy. Pusta odpowiedź jest również odrzucana.
Serwer powinien zwrócić odpowiedź
null
lub{}
zamiast tego.źródło
Zauważyłem, że to miało miejsce w chrome, kiedy wykonałem dwa zapytania ajax w module obsługi jquery `` on load '',
tj. jak
$(function() { $.ajax() ... $.ajax() ... });
Uniknąłem tego używając:
setTimeout(function_to_do_2nd_ajax_request, 1);
przypuszczalnie jest to błąd chrome i / lub jquery
źródło
Miałem ten problem, ponieważ strona nazwałem ajax post from miał
EnableViewState="false"
aEnableViewStateMac="false"
jednak nie strona nazywa.Kiedy umieściłem to na obu stronach, wszystko zaczęło działać. Podejrzewałem to, gdy zobaczyłem wyjątek adresu MAC.
źródło
Twoje dane zwrotne mogą być bardzo długie.
<system.web> <compilation debug="true" targetFramework="4.0" /> <httpRuntime maxRequestLength="2147483647" /> </system.web>
Na przykład:
źródło
Użyj bloku Try Catch po stronie serwera, aw bloku catch przekaż błąd wyjątku do klienta. Powinno to dać pomocny komunikat o błędzie.
źródło
Miałem podobne problemy z kodem AJAX, który sporadycznie zwraca „wewnętrzny błąd serwera 500”. Rozwiązałem problem, zwiększając wartości RequestTimeout i ActivityTimeout „fastCGI”.
źródło
Jestem spóźniony, ale miałem ten problem i dowiedziałem się, że był to błąd w moim kodzie PHP (w moim przypadku składnia wyboru do bazy danych). Zwykle ten błąd 500 jest czymś do zrobienia przy użyciu składni - z mojego doświadczenia. Innymi słowy: problem z "oprogramowaniem dla ludzi"! :RE
źródło
Jako dodatek do odpowiedzi „źle sformułowany JSON”, jeśli uruchamiane zapytanie zwróci obiekt lub cokolwiek, co uniemożliwia serializację danych, pojawi się ten błąd. Powinieneś zawsze mieć pewność, że masz JSON i tylko JSON na końcu metody akcji lub cokolwiek, z czego otrzymujesz dane.
źródło
Zwykle Twoja własność nie jest całkowicie w porządku lub coś jest nie tak z przetwarzaniem na serwerze.
źródło