2013-02-28 18 views
5

Chcę użyć jQuery $.ajax, aby wywołać POST, wysyłając pewne informacje (przez POST jak: page.aspx?var1=value ....).Żądanie POST jQuery - zwracanie JSON

Ale chcę również, aby jQuery obsługiwał to, że usługa zwraca JSON, aby odzyskać obiekt JSON.

var data = {name: _name, ...}; 

var request = $.ajax({ 
    url: url, 
    type: "post", 
    data: data, 
    //dataType: "json" 
}); 

Jak tylko używam dataType: "json", który pozwala mi odbierać obiekt JSON dostaję parseerror na życzenie!

Mam nadzieję, że możesz mi w tym pomóc!

DZIĘKI W ADVACE!

+0

Jaki jest dokładny błąd dostać? –

+0

Możesz ustawić nagłówek taki jak "Content-Type: application/json" w żądaniu, a jQuery automatycznie dowie się, co robi. – Merec

+1

Jeśli otrzymujesz błąd analizy, prawdopodobnie oznacza to, że JSON jest nieprawidłowy. Czy możesz wkleić ciąg JSON, który zwrócisz? Jest prawdopodobne, że gdzieś jest skrócona składnia. – Lev

Odpowiedz

0

upewnij się, że twój skrypt serwera zwraca kodowany json.

W php używać json_encode().

echo json_encode($response); 

również ustawić dataType : 'json' w $.ajax rozmowy.

+1

Holy crap! Jesteście cholernie szybcy !!! Dziękuję za to!! – Nik

+0

Właściwym sposobem jest ustawienie nagłówka na pliku POST przez 'header ('Content-type: application/json');' ...zmusza serwer do rozpoznania go jako json. w tym miejscu nie ma potrzeby używania 'dataType: json'. – PlantTheIdea

+0

@ user2118781 cóż, czy to ci pomaga, czy wciąż tak samo ... daj mi znać, aby uzyskać dodatkową pomoc .. –

0

Po pierwsze, zapytanie pocztowe nie ma parametrów dodanych po adresie URL. Podany format dotyczy żądania GET. Można osiągnąć ten sam cel z następujących powodów:

$.post(
'/yourURLL', 
{'data' : dataJson}, 
function(data){ 
    handleIncomingJSON(data); 
}).error(function(data, textStatus){handleUnsuccessfulSave(data, textStatus)}); 
8

od wnioskowanej url trzeba wprowadzać dane w formacie JSON jak

echo json_encode($response); 

a następnie dostaniesz tej odpowiedzi JSON w funkcji sukcesu jak to:

 $.ajax({ 
      type:"POST", 
      url: "your_url", 
      data:data, 
      success: function (response){ 
       var arr = $.parseJSON(response); 

      } 
     }); 
+2

Z własnego doświadczenia wynika, że ​​najlepsze wyniki uzyskuję przy uruchamianiu rodzimego analizatora JSON w przeglądarkach, zamiast używać biblioteki jQuery do analizowania. Wszystkie nowoczesne przeglądarki obsługują teraz tę metodę, dzięki czemu jest to lepsza metoda kompatybilności z różnymi przeglądarkami. 'var arr = JSON.parse (odpowiedź);' – Epiphany

0

Jak na jQuery $.post documentation, bardzo polecam realizacji wszystkich głównych metod wywołania zwrotnego (done, fail, always) początkowo tak, że gdyby nie było błędów z twojej odpowiedzi JSON wtedy nie dostaniesz ukrycia:

var jqxhr = $.post( 
    "example.php", 
    function(response) {var arr = JSON.parse(response);}, 
    'json' 
) 
.done(function() {console.log("second success");}) 
.fail(function() {console.log("error");}) 
.always(function() {console.log("finished");});