2008-09-17 23 views
10

Ustaliłem, że mój JSON, pochodzący z serwera, jest ważny (wywołując wywołanie ajax ręcznie), ale bardzo chciałbym użyć JQuery. Stwierdziłem również, że adres URL "postu", wysyłany na serwer, jest poprawny, używając firebug. Jednak wywołanie zwrotne błędu jest nadal wyzwalane (parsererror). Próbowałem również datatype: text.Nie można odebrać JSON z JQuery ajax call

Czy są inne opcje, które powinienem uwzględnić?

$(function() { 
    $("#submit").bind("click", function() { 
     $.ajax({ 
      type: "post", 
      url: "http://myServer/cgi-bin/broker" , 
      datatype: "json", 
      data: {'start' : start,'end' : end}, 
      error: function(request,error){ 
       alert(error); 
      }, 
      success: function(request) { 
       alert(request.length); 
      } 
     }); // End ajax 
    }); // End bind 
}); // End eventlistener 

Odpowiedz

19

Oto kilka sugestii, chciałbym spróbować:

1) opcja 'Typ danych' podałeś powinno być 'dataType' (wielkość liter wierzę)

2) spróbuj użyć opcja „contenttype” jak tak:

contentType: "application/json; charset=utf-8" 

nie jestem pewien, ile to pomoże, jak to stosowane we wniosku do postu URL, a nie w odpowiedzi. Zobacz ten artykuł o więcej informacji: http://encosia.com/2008/06/05/3-mistakes-to-avoid-when-using-jquery-with-aspnet-ajax (Jest napisany dla asp.net, ale mogą być stosowane)

3) Triple sprawdzić wyjście twojego postu url i uruchomić wyjście poprzez walidatora JSON, tylko żeby być absolutnie pewny jest poprawna i może być przetwarzana na obiekt JSON. http://www.jsonlint.com

Mam nadzieję, że niektóre z tego pomogą!

+0

Dziękuję bardzo za poświęcenie czasu na odpowiedź. była to opcja dataType, którą miałem jako typ danych: –

+7

Po prostu uwaga, ustawienie dataType na "json" automatycznie ustawia contentType na "application/json". – bhollis

+0

@BHR +1 poprawnie według dokumentów. Jednak może warto zauważyć: Pracuję z jquery 1.6.4 atm i stwierdziłem, że muszę jawnie ustawić contentType: "application/json; charset = utf-8" – zack

0

Parametr danych jest nieprawidłowy. Oto przykład, który działa:

dane: {index: ddl.selectedIndex}

Ten contructs obiekt z właściwość o nazwie indeksu z wartością ddl.selectedIndex.

Musisz usunąć cytaty z linii parametrów danych

Powodzenia

+0

-1, jest to całkowicie poprawna składnia, aby mieć ciąg jako nazwa właściwości. W niektórych sytuacjach jest to konieczne, na przykład, gdy masz nazwę właściwości, która nie byłaby poprawną nazwą identyfikatora w javascript, cytowanie jej pozwoli ci nadać jej wartość. Typowym przykładem jest "klasa", która musi być cytowana, ponieważ jest słowem zastrzeżonym. W składni JSON jest nawet wymagane zawijanie wszystkich nazw właściwości w podwójny cudzysłów. – DarthJDG

1

Dlaczego myResult zamiast request?

success: function(request) { 
       alert(myResult.length); 
      } 
+0

Jestem prawie pewien, że w moim pełnym kodzie manipulowałem prośbą do myResult .... ale zmieniłem ją tak, że jest bardziej zrozumiała ... Problem polegał na tym, że dataType pisano jako "typ danych". Dziękuję za komentarz –