2012-04-26 16 views
0

これは通常の場合とは逆のことだと思います。 PHPのデータをJSONでStringとして受け取って、jQueryでデータをエンコードしたいと考えています。jQuery JSONデータをPHPでJSONとして受け取る

現在、PHPは自動的にデータを配列にデコードします。

PHP 5.3.10(ホストされています)。

<?php 
if(isset($_REQUEST['arr'])) 
{ 
    $arr = $_REQUEST['arr']; 
    $obj = $_REQUEST['obj']; 
    $res = "arr is of type ".gettype($arr).", var_export (".var_export($arr, true).")\n" 
     . "obj is of type ".gettype($obj).", var_export (".var_export($obj, true).")\n"; 
    die(json_encode($res)); 
    exit; 
} 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>test</title> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" ></script> 
<script> 

$(document).ready(function(){ 
    $("#csubmit").click(function() { 
     var arr = new Array("one","two"); 
     var obj = { "one":1, "two":2 }; 
     var data ={ "arr" :arr, "obj" : obj }; 
     $.ajax({ 
      type: "POST", 
      cache: false, 
      data: data, 
      dataType : "json", 
       complete : function(jqXHR, textStatus) { 
        if(textStatus != 'success') 
         alert("Network error ("+textStatus+"/"+jqXHR.responseText+")"); 
       } 
     }).done(function(data) { 
      alert("Got back:("+data+")"); 
     }); 
     return false; 
    }); 
}); 

</script> 
</head> 
<body> 
<form><input type="submit" value="click" id="csubmit"></form> 
</body> 
</html> 

結果は、私はそれはいくつかの文字列になりたいにも関わらず、常に

Got back:(arr is of type array, var_export (array (
    0 => 'one', 
    1 => 'two', 
)) 
obj is of type array, var_export (array (
    'one' => '1', 
    'two' => '2', 
)) 
) 

です。

答えて

1

、あなたが送信され、通常の形でエンコードされたデータ(application/x-www-form-urlencoded):

arr%5B%5D=one&arr%5B%5D=two&obj%5Bone%5D=1&obj%5Btwo%5D=2 

別名

arr[]=one&arr[]=two&obj[one]=1&obj[two]=2 
あなたは

$raw_input = file_get_contents("php://input"); 
echo urldecode($raw_input); 
を行うことにより、PHPからこれを確認することができます

あなたはではない送信{"arr":["one","two"],"obj":{"one":1,"two":2}} JavaScriptで明示的に変換しない限り、その他の点に注意してください。

+0

良い点。データ型jsonがJSONとして配列を送信するようにjQueryを作成していないようです。 – anttir

+0

私は当初もそれに戸惑っていましたが、 '' '' dataType'''はサーバーから返ってくるものです。あなたは、 '' 'data:JSON.stringify(data)、processData:false、contentType:" application/json "' ''というオプションを$ .ajax()に渡すことで、JSONを期待通りに送ることができます。それはPHPをキャッチするのは厄介です – Deebster

1

JavaScriptオブジェクトをJSONにエンコードしてからサーバーに送信することができます。次に、jsonを手動でデコードして配列として使用する必要があります。あなたのajaxメソッドでは、次のようなことをしてください。

data : JSON.stringify(data), 

EDIT:

JSONオブジェクトをネイティブに新しいブラウザでサポートされています。それをサポートしていない人には、http://json.orgのjson2.jsを含めることによって、機能を達成することができます。 JSON訪問https://developer.mozilla.org/En/Using_native_JSON

+0

オブジェクトをJSONにエンコードするには、このAPIをdonwloadする必要があります。http://www.json.org/js.html – MatuDuke

1

OMMIT AJAX要求でdataType: 'json'詳細については

、jQueryの内JSONにデータをエンコードし、PHPに渡します。

これでうまくいくはずです。あなたはJSONをバック受け入れているものの

関連する問題