2012-04-22 11 views
4

ajaxを介してロードされたjsonエンコード情報に問題があります。jQuery ajax/post response encoding

PHPコード(test.phpを):

<?php 
    $val1 = 'Productmanager m/f'; 
    $val2 = 'test'; 
    $arr = array('first' => $val1, 'second' => $val2); 
    echo json_encode($arr); 
?> 

JavaScriptコード、HTMLファイル内:

$(document).ready(function() { 
    $.post("test.php", function(data){ 
    var response = $.parseJSON(data); 
    console.log(response.first); 
    console.log(response.second); 
    } 
}); 

とコンソールの結果は次のようになります。

Productmanager&#x20;m&#x20;&#x2f;&#x20;f 

および

test 

どちらのファイルもUTF-8エンコーダーです。

なぜ、どのように読み込み可能な文字列に変換するのか分かりません。 これがどのように起こるか考えているかもしれませんか?

私は最初に適切な解決策を見つけませんでした。ちょうど&の代替アプローチを検索してください。

+1

私の答えを更新しました。 – iambriansreed

+0

更新後は正常に動作します! – Khazl

答えて

3

のためにこれを試すことができます。

<?php 
    header("Content-type: application/json"); 
    $val1 = "Productmanager m/f"; 
    $val2 = "test"; 
    $arr = array("first" => $val1, "second" => $val2); 
    echo json_encode($arr); 
?> 

<script> 

    $(document).ready(function() { 
     $.post("test.php", function(data){ 
     var response = $.parseJSON(data); 
     console.log(htmlDecode(response.first)); 
     console.log(response.second); 
     } 
    }); 

function htmlEncode(value){ 
    return $('<div/>').text(value).html(); 
} 

function htmlDecode(value){ 
    return $('<div/>').html(value).text(); 
} 

</script> 
+0

OK、その後、 "var response = $ .parseJSON(data);"を削除する必要があります。結果は同じ – Khazl

+0

O.Kです。あなたの更新後、それはうまく動作します:-)多くのありがとう! – Khazl

0

お試しください。

$(document).ready(function() { 
    $.ajax({ 
     type: "POST", 
     url: "test.php", 
     contentType: "application/x-www-form-urlencoded;charset=UTF-8", 
     dataType: 'json', 
     success: function(data) { 
      var response = $.parseJSON(data); 
       console.log(response.first); 
       console.log(response.second); 
     } 
    }); 
}); 
あなたは、あなたのコードは次のようでなければなりません「contentTypeの」あなたのPHP側で

を使用して、AJAX要求の文字エンコーディングを設定することができます

<?php 
    $val1 = 'Productmanager m/f'; 
    $val2 = 'test'; 
    $arr = array('first' => $val1, 'second' => $val2); 
    echo json_encode($arr, JSON_UNESCAPED_UNICODE); 
?> 

重要事項:JSON_UNESCAPED_UNICODEは、PHP 5.4.0で動作します。

+0

これは試してみますが、応答がすでに解析されているため、$ .parseJSONを削除する必要があります。結果は同じでした。 – Khazl

+0

あなたのPHPのバージョンは何ですか? –

+0

私のウェブスペースはPHP 5.3.10で動作します – Khazl

0

あなたは正しいPHPヘッダーを追加し、文字列をデコードし、あなたのtest.php

<?php 
    $val1 = 'Productmanager m/f'; 
    $val2 = 'test'; 
    $arr = array('first' => $val1, 'second' => $val2); 
    echo json_encode($arr, JSON_UNESCAPED_UNICODE); 
?> 
+0

は空の応答で終了します: -/ – Khazl

+0

JSON_UNESCAPED_UNICODEオプションを使用するにはPHPバージョン5.4.0が必要ですので、yout test.phpファイルを実行して、は – Peeyush

+0

申し訳ありませんが、私のnozは、PHPのバージョンを更新する権限を与えています。 – Khazl