1

js の配列にキーから値への値を含めることができないことを今理解したので、配列を js から php に渡したり戻したりするオプションを探していました。それに関する情報を検索すると、jsonオプションが見つかりました。しかし、私の場合 json2.js にプラグインを追加しない限り、js は完全にサポートされていないことがわかります。$.postうまく機能 するコードと機能しないコードが 2 つあり $.ajaxます。$.ajaxテストできる完全なコードがあるので、なぜ機能しないのか教えていただければ幸いです。json2.js はhere .thx $.ajaxコードからのものです。

 $.ajax({
            type: "POST",
            contentType: "application/json;charset=utf-8",
            url: "phpfile.php",
            data: "{ data : dataString }",
            dataType: "json",
            success: function (res) {
               alert('sucsses');
      var obj = jQuery.parseJSON(res);
        if(obj.somebool === true)
          $("#result").html(obj.hello + ' ' + obj.array[1] + obj.worked + ". Message from PHP: "+obj.php_message);
            },
            error: alert ('there was problem with ajax');
        });

*
$.postコード:

    $.post('phpfile.php', {data: dataString}, function(res){
      alert('sucsses');
      var obj = jQuery.parseJSON(res);
        if(obj.somebool === true)
          $("#result").html(obj.hello + ' ' + obj.array[1] + obj.worked + ". Message from PHP: "+obj.php_message);
      });

html コード:

<html>
<head>
<title>Json Test</title>
<SCRIPT src="jquery-1.7.2.min.js"></SCRIPT> 
<SCRIPT src="json2.js"></SCRIPT> 
<script>
$(document).ready(function(){
  var data = new Object();
  data.hello = "Hello";
  data.world = 'World';
  data.worked = " it worked ";
  data.somebool = true;
  data.array = new Array("he\"ll\"o", '"World"');
  alert (data.hello);
  var dataString = JSON.stringify(data);
  alert(dataString);
  $.post('phpfile.php', {data: dataString}, function(res){
  alert('sucsses');
  var obj = jQuery.parseJSON(res);
    if(obj.somebool === true)
      $("#result").html(obj.hello + ' ' + obj.array[1] + obj.worked + ". Message from PHP: "+obj.php_message);
  });
});
</script>
</head>
<body>
<div id="result"></div>
</body>
</html>

phpコード:

<?php
$res = json_decode($_REQUEST['data'], true);
$res["php_message"] = "I am PHP";
echo json_encode($res);
?>
4

2 に答える 2

2

$.ajax()リクエストで設定しましdataType: 'json'た。これは、応答が、JSONオブジェクトを表す文字列ではなく、すでにJSONオブジェクトであることを意味します。したがって、var obj = jQuery.parseJSON(res);コールバック関数を呼び出しても、実際には何の役にも立ちません。res直接作業するだけです。

同等の関数呼び出しは、次のようにオプションの引数を関数に$.post()渡します。dataType

$.post('phpfile.php', {data: dataString}, function(res){
    alert('sucsses');
    var obj = jQuery.parseJSON(res);
    if(obj.somebool === true)
        $("#result").html(obj.hello + ' ' + obj.array[1] + obj.worked + ". Message from PHP: "+obj.php_message);
}, 'json');
于 2012-06-06T10:40:30.833 に答える
0

もう1つは、送信することです。

data: "{ data : dataString }",

これは単なる文字列ですが、有効なJSONではありません。このdataString部分は、何も参照しない文字列文字です。あなたはおそらく意味します:

data: { data : dataString },

これはを参照する実際のオブジェクトでdataStringあり、オブジェクトはJSONに変換されます。

于 2012-06-06T10:45:20.503 に答える