2011-01-25 31 views
23

Estoy tratando de aprender AJAX para este proyecto en el trabajo. Tengo un sitio que carga los medicamentos que está tomando un paciente.Ajax - 500 Error interno del servidor

Llamo a esta función AJAX de forma recursiva para que añada una nueva tabla que contenga un solo medicamento y un historial de 7 días. Tengo problemas para ejecutar el código en FF e IE. Funciona perfectamente bien en cromo. Tenía alertas que muestran la xmlhttp.status y esto es lo que tengo:

xmlhttp.status == 500 (error interno del servidor ).

Cometí todas mis recursiones por lo que se reduce a este pequeño trozo de código. (X lleva la cuenta del número de medicamentos así que sé cuando parar)

function LoadMeds() 


    if (x == MaxMedCount) 
    { 
     document.getElementById("the_day").value = parseInt(document.getElementById("the_day").value)+7; 
    } 
    if (x == (MaxMedCount - 1)) 
    { 
     document.getElementById("x").value = x + 1; 
     show(); 
    } 
    else 
    { 

     if (window.XMLHttpRequest) 
     {// code for IE7+, Firefox, Chrome, Opera, Safari 
      xmlhttp=new XMLHttpRequest(); 
     } 
     else 
     {// code for IE6, IE5 
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     xmlhttp.onreadystatechange=function() 
     { 
      try 
      {  
       if (xmlhttp.readyState==4 && xmlhttp.status==200) 
       {  
        var div = document.createElement('div'); 
        div.innerHTML= xmlhttp.responseText; 
        document.getElementById('MedTable').appendChild(div); 
        document.getElementById("the_med_").value = the_med_; 

       } 

      } 
      catch(e) 
      { 
       alert("Error"); 
      } 
     } 
     xmlhttp.open("GET","URL with variables passed",true); 
     xmlhttp.send();  
     document.getElementById("x").value = x + 1; 
    } 

si se necesita más código, házmelo saber.

Respuesta

43

El 500 (internal server error) significa que algo salió mal del lado del servidor. Podrían ser varias cosas, pero comenzaría por verificar que la URL y los parámetros son correctos. Además, asegúrese de que lo que maneje la solicitud espere la solicitud como GET y no como POST.

Una forma útil de aprender más sobre lo que está sucediendo es usar una herramienta como Fiddler que le permitirá ver todas las solicitudes y respuestas HTTP para que pueda ver exactamente lo que está enviando y el servidor está respondiendo.

Si no tiene un motivo convincente para escribir su propio código Ajax, sería mucho mejor utilizar una biblioteca que maneje las interacciones Ajax por usted. jQuery es una opción.

+0

'Además, asegúrese de que lo que maneja la solicitud espera la solicitud como GET y no como POST' - Entonces, ¿cómo usa el método jQuery.post()? Si quisiera escribir en la base de datos, ¿no debería hacer la solicitud de Ajax como POST – Medorator

+0

@buffer? Su ejemplo mostró 'xmlhttp.open (" GET "," URL con variables pasadas ", verdadero);', por lo que comentar que el servidor esperaba que un GET fuera específico de su código. Use una POST del cliente si el manejo de su solicitud de servidor espera una POST. –

+0

Recibí el mismo error, sé que estoy enviando una gran cantidad de solicitudes de Ajax al servidor y solicitando muchos datos. A veces espero algunas fallas. Solo quiero ocultar ese error 500 emergente y no quiero que el usuario final vea que la solicitud falló. Cómo puedo hacer eso ? Estoy usando el método jquery ajax. – Dashrath

6

Esto puede ser un parámetro incorrecto para su llamada SOAP; observe el formato de los parámetros en la sección 'datos:' json - esta es la carga útil que está pasando - los parámetros y datos envueltos en formato JSON.

La barra de herramientas de depuración de Google Chrome tiene algunas buenas herramientas para verificar los parámetros y ver los mensajes de error; por ejemplo, comience con la pestaña Consola y haga clic en la URL que los errores o haga clic en la pestaña de red. Usted va a querer ver los encabezados del mensaje, la respuesta etc ...

+0

La sugerencia para la pestaña de la consola + clic en la URL es un excelente consejo. esto señalará errores en los parámetros. El mensaje de error proporcionado para este caso es muy específico y me ayudó a depurar mi ajax, 500 Internal Server Error rápidamente. – shev72

1

Elimine la línea siguiente: [System.Web.Script.Services.ScriptService]

servicio comenzará a trabajar muy bien.

[WebService(Namespace = "http://tempuri.org/")] 


[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 


Para permitir este servicio Web que se llama desde el guión, usando ASP.NET AJAX , habilitar la línea siguiente.

[System.Web.Script.Services.ScriptService] 

public class WebService : System.Web.Services.WebService 
{ 
1

Tenía el mismo problema, entonces recordé que por razones de seguridad ASP no expone toda la traza de la pila de error o al acceder a su sitio/servicio de forma remota, lo mismo que no ser capaz de probar un .asmx servicio web de forma remota, por lo que me comuniqué con el servidor y supervisé mis herramientas de desarrollo, y solo entonces recibí el notorio mensaje "No se pudo cargar el archivo o el ensamblaje 'Newtonsoft.Json, Version=3.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' o uno de sus dep ...".

Inicie sesión en el servidor y depure desde allí.

8

Creo que los datos de la cadena de retorno son muy largos. por lo que el formato JSON ha sido dañado. Debe cambiar el tamaño máximo de datos JSON de esta manera:

abra el archivo Web.config y pegar estas líneas en la sección de configuración

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

He arreglado un error como este cambio de los lugares de la rutas en routes.php, por ejemplo, que tenía algo como esto:

Route::resource('Mensajes', 'MensajeriaController'); 
Route::get('Mensajes/modificar', '[email protected]'); 

y luego ponerlo de esta manera:

Route::get('Mensajes/modificar', '[email protected]'); 
Route::resource('Mensajes', 'MensajeriaController'); 
Cuestiones relacionadas