web-dev-qa-db-ja.com

json ajaxリクエストとjsonレスポンス、どのように?

私は2つの投稿値でajaxリクエストを送信しています。最初はPHPスクリプトが解析するアクションを定義する「アクション」、もう一方はスクリプトを解析するユーザーのIDである「ID」です。
サーバーはarray()内で6つの値を返し、PHP function:json_encode();でJSONにエンコードされます
応答の一部はHTMLですが、JSONにエンコードすると、"/"だから"\/"
無効にするにはどうすればよいですか?

[。 PHPでエンコードされた配列。

[〜#〜] 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を機能させるにはどうすればよいですか?

32
Flaashing

を呼び出す必要があります

_$.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/ でこれを参照してください

それでもスラッシュの問題がある場合: security.magicquotes.disabling.php または: function.stripslashes.php を検索してください

注:

ここでの回答は、dataTypeプロパティをjsonに設定して_$.ajax_を使用しようとして、それでも間違った応答タイプを取得しようとした人向けです。サーバーでheader('Content-type: application/json');を定義すると問題が修正される場合がありますが、_text/html_またはその他の型を返す場合は、_$.ajax_メソッドでjsonに変換する必要があります。古いバージョンのjQueryでテストを行い、バージョン_1.4.4_の後にのみ_$.ajax_を強制して、渡されたdataTypeにコンテンツタイプを変換します。したがって、この問題がある場合は、jQueryバージョンを更新してください。

47
Guilherme

まず、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にレンダリングすることをお勧めします。

27
sgb

バインドされたデータでオペコードの送受信を使用して、javascriptクライアントサイドコントローラーとphpサーバーサイドコントローラーを接続します。したがって、あなたのPHPコードは、js recepient/listenerの応答関数デルタとして送信できます

https://github.com/ArtNazarov/LazyJs を参照してください

悪い英語でごめんなさい

2
ArtNazarov

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

PHPの変更

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

JS(dataTypeをjsonからhtmlに変更するか、設定しないでjQueryが判断します)

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