2013-02-28 20 views
5

Ich möchte die jQuery $.ajax verwenden, um einen POST-Anruf senden einige Informationen (über POST wie: page.aspx?var1=value ....).jQuery-POST-Anfrage - JSON

Aber ich mag auch jQuery zu handhaben, dass der Dienst JSON zurückkehrt, so dass ich wieder ein JSON-Objekt zu erhalten.

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

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

Sobald ich dataType: "json" verwenden, die mir das JSON-Objekt zu erhalten erlaubt ich eine parseError auf Antrag erhalten!

Hoffe, Sie können mir dabei helfen!

DANKE IN ERFAHRUNG!

+0

Was ist die genauen Fehler, den Sie bekommen? –

+0

Sie können einen Header wie "Content-Type: application/json" in der Anfrage setzen und jQuery wird automatisch wissen, was es bekommt. – Merec

+1

Wenn Sie einen Analysefehler erhalten, bedeutet dies wahrscheinlich, dass Ihr JSON ungültig ist. Können Sie die Zeichenfolge von JSON einfügen, die Sie zurückgegeben haben? Es ist wahrscheinlich, dass die Syntax irgendwo unterbrochen ist. – Lev

Antwort

0

Stellen Sie sicher, dass Ihr serverseitiges Skript den codierten JSON zurückgibt.

In PHP json_encode().

echo json_encode($response); 

setzen auch dataType : 'json' in $.ajax Anruf.

+1

Heiliger Mist! Ihr seid verdammt schnell !!! Dank dafür!! – Nik

+0

Der richtige Weg ist, den Header auf Ihrer POST-Datei durch 'header ('Content-type: application/json');' ...Dies zwingt den Server, es als json zu erkennen. keine Notwendigkeit für den 'dataType: json' an diesem Punkt. – PlantTheIdea

+0

@ user2118781 gut hilft es Ihnen oder immer noch gleich ... lassen Sie mich für weitere Hilfe wissen .. –

0

Zum einem Post-Anforderung nicht über die nach der URL angehängt Parameter. Das von Ihnen angegebene Format gilt für die GET-Anfrage. Sie können das gleiche Ziel erreichen mit folgenden:

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

Von der gewünschten URL-Daten im JSON-Format wie

echo json_encode($response); 

machen müssen und dann werden Sie diese Antwort JSON in Erfolg Funktion erhalten wie dies:

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

      } 
     }); 
+2

Meiner Erfahrung nach hatte ich die besten Ergebnisse beim Aufruf des nativen JSON-Parsers des Browsers, anstatt die jQuery-Bibliothek zum Parsen zu verwenden. Alle modernen Browser unterstützen jetzt diese Methode und sind damit eine bessere Methode für die browserübergreifende Kompatibilität. 'var arr = JSON.parse (Antwort);' – Epiphany

0

gemäß der jQuery $.post documentation, ich alle wichtigen Rückruf Implementierung Methoden sehr empfehlen (done, fail, always) zunächst so, dass, wenn Fehler mit JSON-Antwort wurden dann bekommen sie nicht versteckt:

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