2012-02-01 13 views
27

2つのポスト値を持つajaxリクエストを送信しています。最初は "php"スクリプトが解析するアクションを定義する "action"、もう1つは "id"です。 。
サーバは、(アレイ内部に6つの値を返す)、次いで、PHP機能をJSONにエンコードされている:json_encode();
私の応答の一部がHTMLであるが、私はJSONにそれをエンコードするとき、それは"/"をエスケープそれは"\/"
なります どうすれば無効にできますか?

また、サーバーの応答を取得したときにjQueryでこれを表示する方法がわからないときは、divにすべて入れると、要求した数値とHTMLコードが表示されるだけですが、これはPHPでエンコードされているためです。jsonレスポンスによるjQuery ajaxリクエスト、どのように?

PHP

$response = array(); 
$response[] = "<a href=''>link</a>"; 
$response[] = 1; 
echo json_encode($response); 

のjQuery:

$.ajax({ 
    type: "POST", 
    dataType: "json", 
    url: "main.php", 
    data: "action=loadall&id=" + id, 
    complete: function(data) { 
     $('#main').html(data.responseText); 
    } 
}); 

は、どのように私はこれはJSONの作業に作るのですか?

+0

ためhttps://github.com/ArtNazarov/LazyJs

は申し訳ありませんが見るあなたも、問題のより良いアイデアを得るためにあなたのJSONレスポンスをダンプすることはできますか?あなたが "/"によって何を意味するかわからないので、 "/" – Sid

+0

あなたはhttp://api.jquery.com/jQuery.getJSON/を試しましたか? –

+0

申し訳ありませんsid私はバックスラッシュを作成しましたが、それはちょっと消えました:)しかし、すべての通常のスラッシュは "バックスラッシュ" + "通常のスラッシュ"の前にバックスラッシュを取得します ka_lin:私はそれを見ましたが、私はリクエストとともにいくつかの投稿データを送信しますか? – Flaashing

答えて

38

あなたは

を呼び出す必要があります
$.parseJSON(); 

例:

... 
success: function(data){ 
     var json = $.parseJSON(data); // create an object with the key of the array 
     alert(json.html); // where html is the key of array that you want, $response['html'] = "<a>something..</a>"; 
    }, 
    error: function(data){ 
     var json = $.parseJSON(data); 
     alert(json.error); 
    } ... 

それでもスラッシュの問題を持っている場合 http://api.jquery.com/jQuery.parseJSON/

でこれを参照してください。 function.stripslashes.php

注:security.magicquotes.disabling.php かについて 検索

は、ここではこの答えは、人のためのものです$.ajaxdataTypeプロパティをjsonに設定して使用してみてください。間違った応答タイプ。サーバにheader('Content-type: application/json');を定義すると問題が解決する可能性がありますが、text/htmlまたは他のタイプを返す場合は、$.ajaxメソッドでjsonに変換する必要があります。以前のバージョンのjQueryを使って、バージョン1.4.4の後、$.ajaxのコンテンツタイプをdataTypeに変換するよう強制しました。したがって、この問題がある場合は、jQueryバージョンを更新してみてください。

+0

引数リストの後に「alert(data.0);」というエラーが表示されます。 – Flaashing

+0

はい、それは例でした。数値は可能なので、オブジェクトに変換できるキーで配列を定義する必要があります。 $ response ['html'] = "something"のようなものです。 parseJSON json.htmlを使用して呼び出すよりも(上記の例のように)。 – Guilherme

+0

ああ、それは動作します!それは私が欲しいものです簡単です:)ありがとう! – Flaashing

23

まず、それはあなたがJSON提供するために、あなたのPHPのヘッダを設定する場合に役立ちます。

header('Content-type: application/json'); 

を第二に、それはあなたのAJAX呼び出しを調整するのに役立ちます。成功した場合

$.ajax({ 
    url: "main.php", 
    type: "POST", 
    dataType: "json", 
    data: {"action": "loadall", "id": id}, 
    success: function(data){ 
     console.log(data); 
    }, 
    error: function(error){ 
     console.log("Error:"); 
     console.log(error); 
    } 
}); 

を、応答は本当のJSONとして受け取り、オブジェクトはコンソールに記録する必要があります。

注:純粋なhtmlを取得する場合は、別の方法をJSONに使用することを検討することをおすすめしますが、私は個人的にJSONを使用し、テンプレート(例:Handlebars js)を使用してHTMLにレンダリングすることをおすすめします。

+0

私の火かき棒のコンソールであなたの例を試してみましたが、応答がありません}プロパティリストの後ろに "sucess:function(data){" データを設定した後に昏睡状態になりました。 しかし、それは私にfirebugのjsonでコード化された応答を与えます – Flaashing

+0

私は文法エラーがありました - "成功"は "成功"でなければなりません。今すぐあなたの応答を調べ、その部分をDOMに出力できるはずです。 – sgb

+0

そうですね、どのように配列を6ビットのjqueryに分割し、6つの異なる要素で出力するのですか? – Flaashing

1

マークアップを文字列として作成するため、マークアップをjsonに変換していないためです。 implodeメソッドを使用してすべての配列要素を組み合わせているので、そのまま送信してください。これを試して。

PHP変更

$response = array(); 
$response[] = "<a href=''>link</a>"; 
$response[] = 1; 
echo implode("", $response);//<-----Combine array items into single string 

JS(jQueryのそれを把握しますHTMLにまたはそれを設定しないJSONからのデータ型を変更)

$.ajax({ 
    type: "POST", 
    dataType: "html", 
    url: "main.php", 
    data: "action=loadall&id=" + id, 
    success: function(response){ 
     $('#main').html(response); 
    } 
}); 
+0

@Flaashing - これを試しましたか? – ShankarSangoli

+0

いいえ、6つの値をそれぞれ6つの異なる要素に表示したいからです:) – Flaashing

2

バインドされたデータを送受信するオペコードを使用して、JavaScriptのクライアントサイドコントローラとPHPサーバサイドコントローラを接続します。だからあなたのPHPコードは、jsの仮親/リスナーのために応答機能デルタとして

を送ることができます私の悪い英語

関連する問題