Estoy tratando de realizar esta publicación AJAX, pero por alguna razón recibo un error del servidor 500. Puedo verlo tocar puntos de ruptura en el controlador. Entonces el problema parece estar en la devolución de llamada. ¿Nadie?
$.ajax({
type: "POST",
url: "InlineNotes/Note.ashx?id=" + noteid,
data: "{}",
dataType: "json",
success: function(data) {
alert(data[1]);
},
error: function(data){
alert("fail");
}
});
Esta es la cadena que debe devolverse:
{status:'200', text: 'Something'}
javascript
jquery
ajax
Mella
fuente
fuente
Respuestas:
Sospecho que el método del servidor está lanzando una excepción después de que pasa su punto de interrupción. Utilice Firefox / Firebug o las herramientas de desarrollo de IE8 para ver la respuesta real que obtiene del servidor. Si ha habido una excepción, obtendrá el html de YSOD, que debería ayudarlo a averiguar dónde buscar.
Una cosa más: su propiedad de datos debe ser {} no "{}", el primero es un objeto vacío mientras que el segundo es una cadena que no es válida como parámetro de consulta. Mejor aún, déjelo fuera si no está pasando ningún dato.
fuente
en caso de que si alguien usa el marco de codeigniter, el problema puede ser causado por la configuración de protección csrf habilitada.
fuente
Yo mismo tuve este problema, aunque no pude encontrar el motivo en mi caso, al cambiar de
POST
aGET
, ¡el error 500 del problema desapareció!type:'POST'
fuente
Este es el código simple de solicitud Ajax para obtener datos a través de la solicitud 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"); } });
fuente
Experimenté un error compuesto similar, que requirió dos soluciones. En mi caso, la pila de tecnología fue MVC / ASP.NET / IIS / JQuery. El lado del servidor estaba fallando con un error 500, y esto ocurría antes de que el controlador manejara la solicitud, lo que dificultaba la depuración en el lado del servidor.
La siguiente depuración del lado del cliente me permitió determinar el error del servidor
En la devolución de llamada de error $ .ajax, muestre el detalle del error en la consola
error: (error) => { console.log(JSON.stringify(error)); }
Esto al menos me permitió ver el error inicial del servidor.
"La solicitud JSON era demasiado grande para serializarse"
Esto se resolvió en el cliente web.config
<appSettings> <add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
Sin embargo, la solicitud aún falló. Pero esta vez con un error diferente que ahora pude depurar en el lado del servidor
"Solicitar entidad demasiado grande"
Esto se resolvió agregando lo siguiente al servicio 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>
Los valores de configuración pueden requerir un ajuste adicional, pero al menos resolvió los errores del servidor causados por la publicación ajax.
fuente
Puede buscar códigos de estado HTTP aquí (o aquí ), este error le dice:
"El servidor encontró una condición inesperada que le impidió cumplir con la solicitud".
Necesitas depurar tu servidor.
fuente
Hoy me encuentro con lo mismo. Como se sugirió antes, obtenga Firebug para Firefox, habilite la consola y obtenga una vista previa de la respuesta POST. Eso me ayudó a descubrir cuán estúpido era el problema. Mi acción esperaba un valor de un tipo int y estaba publicando una cadena. (ASP.NET MVC2)
fuente
Debería haber un evento registrado en EventVwr (Advertencia de asp.net), que podría brindarle más detalles sobre dónde podría estar el error.
fuente
Un 500 de ASP.NET probablemente significa que se lanzó una excepción no controlada en algún momento al atender la solicitud.
Le sugiero que adjunte un depurador al proceso del servidor web (suponiendo que tenga acceso).
Una cosa extraña: realiza una solicitud POST al servidor, pero no pasa ningún dato (todo está en la cadena de consulta). ¿Quizás debería ser una solicitud GET en su lugar?
También debe verificar que la URL sea correcta.
fuente
Hoy me enfrento a este problema. con este tipo de error, no obtendrá ninguna respuesta del servidor, por lo tanto, es muy difícil localizar el problema.
Pero puedo decirle que "500 error de servidor interno" es un error con el servidor, no con el cliente, tiene un error en el script del lado del servidor. Comente el código de cierre por cierre e intente ejecutarlo nuevamente, pronto descubrirá que extraña un personaje en alguna parte.
fuente
También puede obtener ese error en VB si la función que está llamando comienza con Public Shared Function en lugar de Public Function en el servicio web. (Como podría suceder si mueve o copia la función fuera de una clase). Solo otra cosa a tener en cuenta.
fuente
¿Puede publicar la firma de su método que se supone que acepta esta publicación?
Además, recibo el mismo mensaje de error, posiblemente por una razón diferente. Mi YSOD habló de que el diccionario no contiene un valor para el valor que no acepta valores NULL. La forma en que obtuve la información de YSOD fue poner un punto de interrupción en la función $ .ajax que manejó una devolución de error de la siguiente manera:
<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 }); };
Entonces mi errorFunc javascript es así:
function(request, textStatus, errorThrown) { $("#install").text("Error doing auto-installer search, proceed with ticket submission\n" +request.statusText); }
Usando IE fui al menú de visualización -> depurador de script -> romper en la siguiente declaración. Luego fui a activar el código que lanzaría mi publicación. Esto generalmente me llevó a algún lugar dentro de la biblioteca de jQuery en lugar de donde quería, porque la apertura desplegable de selección activó jQuery. Entonces presioné StepOver, luego la siguiente línea real también se rompería, que era donde quería estar. Luego, VS entra en modo del lado del cliente (dinámico) para esa página, y puse un salto en la
$("#install")
línea para poder ver (usando el mouse sobre la depuración) lo que estaba en request, textStatus, errorThrown. solicitud. En request.ResponseText había un mensaje html donde vi:<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>
así que verifique todo eso y publique la firma del método de su controlador en caso de que eso sea parte del problema
fuente
Me encontré teniendo este error. Tenía la redirección .htaccess configurada en un directorio. Bueno, redirige las llamadas ajax a ofcourse (
$.post(../ajax.php)
), por lo que no pudo encontrar el archivo real (lo que resultó en un error 500).Lo 'arreglé' colocando el ajax.php en un directorio (por lo
.htaccess
que no afectó).fuente
Pude encontrar la solución usando el depurador de Chrome (no tengo Firebug u otras herramientas de terceros instaladas)
Me mostró que tenía un problema en el servidor, cuando estaba devolviendo un valor que era autoreferenciado.
fuente
En mi caso fue un problema simple, pero difícil de encontrar. La directiva de página tenía atributos de Herencia incorrectos. Solo necesita incluir el nivel superior y funcionó.
Codigo erroneo
<%@ Page Language="C#" CodeBehind="BusLogic.aspx.cs" Inherits="BusLogic"%>
Código correcto
<%@ Page Language="C#" CodeBehind="BusLogic.aspx.cs" Inherits="Web.BusLogic" %>
fuente
Cuando use el marco CodeIgniter con la protección CSRF habilitada, cargue el siguiente script en cada página donde pueda ocurrir una POST ajax:
$(function(){ $.ajaxSetup({ data: { <?php echo $this->config->item('csrf_token_name'); ?>: $.cookie('<?php echo $this->config->item('csrf_cookie_name'); ?>') } }); });
Requiere: plugin jQuery y jQuery.cookie
Fuentes: https://stackoverflow.com/a/7154317/2539869 y http://jerel.co/blog/2012/03/a-simple-solution-to-codeigniter-csrf-protection-and-ajax
fuente
Los datos JSON que está pasando al servidor deben tener el mismo nombre que el que forma en el lado del cliente. Ex:
var obj = { Id: $('#CompanyId').val(), Name: $("#CompanyName").val() }; $.Ajax(data: obj, url: "home/InsertCompany".....
Si el nombre es diferente, ex:
Obtendrá este error.
Si no está pasando los datos, elimine el atributo de datos de la solicitud AJAX.
fuente
Tuve este problema y descubrí que el método C # del lado del servidor debería ser estático .
Lado del cliente:
$.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) { }
Lado del servidor:
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"; } }
fuente
Como se mencionó, creo que los datos de su cadena de retorno son muy largos. por lo que el formato JSON se ha dañado.
Hay otra forma de resolver este problema. Debe cambiar el tamaño máximo de los datos JSON de esta manera:
Abra el archivo Web.Config y pegue estas líneas en la sección de configuración
<system.web.extensions> <scripting> <webServices> <jsonSerialization maxJsonLength="50000000"/> </webServices> </scripting> </system.web.extensions>
fuente
También enfrenté el mismo problema. Aquí hay dos formas en que lo he resuelto: 1. Si está utilizando algún marco, asegúrese de enviar un token CSRF con la llamada ajax también.
<meta name="_token" content="{{ csrf_token() }}">
En su archivo js, asegúrese de llamar a esto antes de enviar la llamada ajax
$.ajaxSetup({ headers: { 'X_CSRF-TOKEN' : $('meta[name="_token"]').attr('content') } });
method
depost
aget
fuente
Para mí, el error estaba en el archivo php al que estaba enviando la solicitud. Se produjo un error en la conectividad de la base de datos. Después de corregir el código php, se resolvió el error.
fuente
Su código contiene dataType: json .
En este caso, jQuery evalúa la respuesta como JSON y devuelve un objeto JavaScript. Los datos JSON se analizan de forma estricta. Se rechaza cualquier JSON con formato incorrecto y se genera un error de análisis. También se rechaza una respuesta vacía.
El servidor debería devolver una respuesta de
null
o en su{}
lugar.fuente
Encontré que esto ocurrió en Chrome cuando hice dos consultas ajax en el controlador jquery ' on load ',
es decir, como
$(function() { $.ajax() ... $.ajax() ... });
Lo evité usando:
setTimeout(function_to_do_2nd_ajax_request, 1);
es presumiblemente un error de Chrome y / o jquery
fuente
Tuve este problema porque la página desde la que llamé ajax post tenía
EnableViewState="false"
yEnableViewStateMac="false"
no la página llamada.Cuando puse esto en ambas páginas, todo empezó a funcionar. Sospeché esto cuando vi la excepción de la dirección MAC.
fuente
Los datos de su cadena de retorno pueden ser muy largos.
<system.web> <compilation debug="true" targetFramework="4.0" /> <httpRuntime maxRequestLength="2147483647" /> </system.web>
Por ejemplo:
fuente
Utilice un bloque Try Catch en el lado del servidor y en el bloque catch devuelva el error de excepción al cliente. Esto debería darle un mensaje de error útil.
fuente
He tenido problemas similares con el código AJAX que esporádicamente devuelve el "error 500 del servidor interno". Resolví el problema aumentando los valores de RequestTimeout y ActivityTimeout de "fastCGI".
fuente
Llegué tarde, pero estaba teniendo este problema y lo que aprendí fue que era un error en mi código PHP (en mi caso, la sintaxis de una selección de la base de datos). Por lo general, este error 500 es algo que se debe hacer usando la sintaxis, en mi experiencia. En otras palabras: ¡problema de "software para personas"! :RE
fuente
Además de la respuesta "JSON con formato incorrecto", si la consulta que está ejecutando devuelve un objeto o cualquier cosa que impida que los datos se serialicen, obtendrá este error. Siempre debe asegurarse de tener JSON y solo JSON al final de su método de acción o lo que sea que esté obteniendo los datos.
fuente
Por lo general, su propiedad no es del todo correcta o hay algún problema con el procesamiento de su servidor.
fuente