2011-01-25 13 views
23

Sto cercando di imparare AJAX per questo progetto sul posto di lavoro. Ho un sito che carica i farmaci che un paziente sta assumendo.Ajax - 500 Internal Server Error

Io chiamo questa funzione AJAX in modo ricorsivo in modo che possa aggiungere una nuova tabella contenente un singolo farmaco e 7 giorni vale la pena di storia. Sto riscontrando problemi nell'ottenere il codice da eseguire in FF e IE. Funziona perfettamente bene in cromo. Ho avuto avvisi che espongono il xmlhttp.status e questo è quello che ho ottenuto:

xmlhttp.status == 500 (interno errore del server ).

Ho commentato tutta la mia ricorsione quindi è ridotto a questo piccolo pezzo di codice. (X tiene traccia del numero di medicinali quindi so quando smettere)

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; 
    } 

se è necessario più codice fammelo sapere.

risposta

43

Il 500 (internal server error) significa qualcosa è andato storto sul lato del server. Potrebbe essere diverse cose, ma vorrei iniziare verificando che l'URL e i parametri siano corretti. Inoltre, assicurarsi che tutto ciò che gestisce la richiesta si aspetta la richiesta come un GET e non un POST.

Un modo utile per saperne di più su cosa sta succedendo è utilizzare uno strumento come Fiddler che consente di guardare tutte le richieste e le risposte HTTP in modo da poter vedere esattamente ciò che stai inviando e il server sta rispondendo.

Se non si dispone di un motivo valido per scrivere il proprio codice Ajax, si sarebbe molto meglio usare una libreria che gestisce le interazioni Ajax per voi. jQuery è un'opzione.

+0

'Inoltre, assicurati che qualsiasi cosa gestisca la richiesta si aspetti la richiesta come GET e non un POST' - Come usi allora il metodo jQuery.post()? Se mi piacerebbe scrivere sul database, non dovrei fare richiesta Ajax come POST – Medorator

+0

@buffer Il suo esempio ha mostrato 'xmlhttp.open (" GET "," URL con variabili passate ", vero);', quindi commento sul server che si aspettava che GET fosse specifico del suo codice. Utilizzare un POST dal client se la gestione delle richieste del server prevede un POST. –

+0

Ho ricevuto lo stesso errore, so che sto inviando un sacco di richieste Ajax al server e mi chiedono molti dati. Mi aspetto che alcune richieste falliscano a volte. Voglio solo nascondere quel 500 error popup e non voglio che l'utente finale veda che la richiesta non è riuscita. Come lo faccio ? Sto usando il metodo jquery ajax. – Dashrath

6

Questo può essere un parametro non corretto per la chiamata SOAP; guarda il formato dei parametri nella sezione 'dati:' json - questo è il payload che stai passando - parametri e dati avvolti nel formato JSON.

La barra degli strumenti di debug di Google Chrome è dotata di alcuni strumenti utili per verificare i parametri e visualizzare i messaggi di errore, ad esempio, iniziare con la scheda Console e fare clic sull'URL in corrispondenza dell'errore o fare clic sulla scheda di rete. Si vuole visualizzare le intestazioni del messaggio, la risposta ecc ...

+0

Il suggerimento per la scheda della console + fare clic sull'URL è un suggerimento eccellente! questo evidenzierà errori nei parametri. Il messaggio di errore fornito per questo caso è molto specifico e mi ha aiutato a eseguire il debug del mio ajax, errore interno del server 500 rapidamente! – shev72

1

Rimuovere il commento dalla seguente riga: [System.Web.Script.Services.ScriptService]

servizio inizierà a funzionare bene.

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


[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 


Per consentire a questo servizio Web per essere chiamato da uno script, utilizzando ASP.NET AJAX , rimuovere il commento dalla seguente riga.

[System.Web.Script.Services.ScriptService] 

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

Aveva lo stesso problema, poi mi sono ricordato che, per ragioni di sicurezza ASP non espone l'intero errore o di traccia dello stack quando si accede tuo sito/servizio in remoto, lo stesso come non essere in grado di testare un .asmx servizio web remoto, così ho remotato nel sever e monitorato i miei strumenti dev, e solo in quel momento ho ricevuto il famigerato messaggio "Impossibile caricare file o assembly 'Newtonsoft.Json, Version=3.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' o uno dei suoi dep ...".

Quindi accedere al server ed eseguire il debug da lì.

8

Penso che i dati della stringa di ritorno siano molto lunghi. quindi il formato JSON è stato corrotto. Si dovrebbe modificare la dimensione massima per i dati JSON in questo modo:

Aprire il file web.config e incollare queste righe nella sezione di configurazione

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

ho fissato un errore come questo cambiando i luoghi della itinerari in routes.php, per esempio ho avuto qualcosa di simile:

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

e poi ho messo in questo modo:

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