2013-02-28 14 views
5

jQuery $.ajaxを使用して、POSTコールによっていくつかの情報を送信する(POSTのように:page.aspx?var1=value ....)。jQuery POSTリクエスト - JSONを返す

しかし、サービスがJSONを返すようにjQueryで処理して、JSONオブジェクトを返すようにしたいとします。

とすぐに私は私が私がリクエストに応じてParseErrorのを取得するJSONオブジェクトを受け取ることができます dataType: "json"を、使用して
var data = {name: _name, ...}; 

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

あなたは私を助けてくれることを願っています!

アドバイスありがとうございました!

+0

あなたが得る正確なエラーは何ですか? –

+0

リクエストに「Content-Type:application/json」のようなヘッダーを設定すると、jQueryは自動的にその内容を知ります。 – Merec

+1

解析エラーが発生した場合、JSONが無効である可能性があります。返されるJSONの文字列を貼り付けることはできますか?構文がどこかで壊れている可能性があります。 – Lev

答えて

0

サーバサイドスクリプトがエンコードされたjsonを返すことを確認してください。

PHPではjson_encode()です。

echo json_encode($response); 

$.ajax呼び出しでdataType : 'json'を設定します。

+1

うんざり!あなたたちはすごく素早い!!!それに感謝! – Nik

+0

適切な方法は 'header( 'Content-type:application/json');'によってPOSTファイルのヘッダを設定することです。これにより、サーバーはそれをjsonとして認識します。その時点で 'dataType:json'の必要はありません。 – PlantTheIdea

+0

@ user2118781よくやっていますが、もっと助けてもらえますか? –

0

最初の投稿要求には、URLの後にパラメータが追加されません。あなたが指定した書式はGET要求のためのものです。あなたは

echo json_encode($response); 

のようなJSON形式 でデータを作成し、その後、あなたのような成功機能にそのレスポンスJSONを取得する必要があり、要求されたURLから

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

:あなたは、次のと同じ目標を達成することができます この:jQuery $.post documentation 1として

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

      } 
     }); 
+2

私自身の経験上、jQueryライブラリを解析するのではなく、ブラウザ固有のJSONパーサを呼び出すときに最良の結果が得られました。現代のブラウザはすべて、この方法をサポートしており、ブラウザ間の互換性のためのより良い方法になっています。 'var arr = JSON.parse(レスポンス);' – Epiphany

0

、私は非常(すべての主要なコールバックメソッドを実装するお勧めします、failalways)は、最初のエラーはあなたのJSON応答であったならば、彼らは隠された取得しないように:

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