2011-01-25 18 views
23

Próbuję nauczyć się AJAX dla tego projektu w pracy. Mam witrynę, która ładuje leki, które przyjmuje pacjent.Ajax - 500 Wewnętrzny błąd serwera

Nazywam tę funkcję AJAX rekurencyjnie, tak aby dodała nową tabelę zawierającą pojedynczy lek i 7 dni historii. Mam problemy z uzyskaniem kodu do wykonania w FF i IE. Działa idealnie dobrze w chromie. Miałem powiadomienia wyświetlające xmlhttp.status i to, co mam:

xmlhttp.status == 500 (wewnętrzny błąd serwera ).

Skomentowałem wszystkie moje rekursy, więc jest zawężony do tego tid bit kodu. (x śledzi liczbę leków, więc wiem, kiedy przestać)

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

jeśli potrzebujesz więcej kodu, daj mi znać.

Odpowiedz

43

500 (internal server error) oznacza, że ​​coś poszło nie tak po stronie serwera. Może to być kilka rzeczy, ale zacznę od sprawdzenia, czy adres URL i parametry są poprawne. Upewnij się również, że cokolwiek obsługuje żądanie, oczekuje żądania jako GET, a nie POST.

Jednym z przydatnych sposobów, aby dowiedzieć się więcej o tym, co się dzieje jest użycie narzędzia takiego jak Fiddler, które pozwoli ci oglądać wszystkie żądania HTTP i odpowiedzi, abyś mógł zobaczyć, co dokładnie wysyłasz, a serwer odpowiada.

Jeśli nie masz nieodpartego powodu, aby napisać własny kod Ajax, lepiej byłoby użyć biblioteki, która obsługuje interakcje Ajax. jQuery jest jedną z opcji.

+0

'Upewnij się również, że cokolwiek obsługuje żądanie, oczekuje na żądanie jako GET, a nie POST" - Jak wtedy użyć metody jQuery.post()? Jeśli chciałbym pisać do bazy danych, nie powinienem składać prośby o Ajax jako POST – Medorator

+0

@buffer Jego przykład pokazuje 'xmlhttp.open (" GET "," URL ze zmiennymi przekazanymi ", true);', więc komentarz na temat serwera, który oczekiwał, że GET jest specyficzny dla jego kodu. Użyj POST od klienta, jeśli obsługa żądań serwera oczekuje POST. –

+0

Mam ten sam błąd, wiem, że wysyłam dużo zapytań ajax do serwera i proszę o wiele danych. Spodziewam się, że kilka próśb czasami zawiedzie. Chcę tylko ukryć to wyskakujące okienko błędów i nie chcę, aby użytkownik końcowy zobaczył, że żądanie nie powiodło się. Jak mogę to zrobić ? Używam metody ajax jquery. – Dashrath

6

Może to być niepoprawny parametr twojego połączenia SOAP; spójrz na format parametrów w sekcji "data:" json - jest to ładunek, który przechodzisz - parametr i dane zapakowane w format JSON.

Pasek narzędzi do debugowania Google Chrome ma kilka dobrych narzędzi do sprawdzania parametrów i wyświetlania komunikatów o błędach - na przykład, zacznij od karty Konsola i kliknij adres URL, którego błędów lub kliknij kartę sieci. Będziemy chcieli, aby zobaczyć nagłówki z wyświetlanymi, odpowiedzi itp ...

+0

Wskazówka dla konsoli Tab + kliknięcie na URL jest świetną wskazówką! to wskaże błędy w parametrach. Komunikat o błędzie dostarczony dla tego przypadku jest bardzo specyficzny i pomógł mi szybko debugować mój błąd ajax, 500 Internal Server Error! – shev72

1

Odkomentuj następujący wiersz: [System.Web.Script.Services.ScriptService]

usługi rozpocznie działa poprawnie.

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


[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 


Aby umożliwić to Web Service na miano ze skryptu przy użyciu ASP.NET AJAX odkomentować następującą linię.

[System.Web.Script.Services.ScriptService] 

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

Miał bardzo sam problem, a potem przypomniałem sobie, że ze względów bezpieczeństwa ASP nie narazić całą błąd lub ślad stosu, gdy dostęp do witryny/usługi zdalnie, tak samo jak nie jest w stanie przetestować .asmx Usługa sieci Web zdalnie, więc ponownie włączyłem serwer i monitorowałem narzędzia programistyczne, a dopiero potem otrzymałem notoryczny komunikat "Nie można załadować pliku lub zestawu 'Newtonsoft.Json, Version=3.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' lub jednego z jego dep ...".

Zaloguj się do serwera i stwórz debugowanie.

8

Wydaje mi się, że twoje dane ciągu powrotnego są bardzo długie. więc format JSON został uszkodzony. należy zmienić maksymalny rozmiar danych JSON w ten sposób:

Otwórz plik web.config i wklej te wiersze w sekcji konfiguracji

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

Naprawiłem błąd tak zmieniających się miejscach szlaki w routes.php, na przykład miałem coś takiego:

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

a następnie umieścić go w ten sposób:

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