1

我刚刚理解 js 中的数组无法包含值的键,所以我正在寻找将数组从 js 传递到 php 并返回的选项。当我搜索相关信息时,我找到了 json 选项。但我看到 js 不完全支持,除非你在我的情况下添加插件 json2.js 。我有两个不同的代码,它们运行 $.post良好 $.ajax但不起作用。如果你告诉我为什么$.ajax不工作,我会很高兴你有完整的代码可以测试。json2.js 来自这里.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 对象,而不是代表一个的字符串。因此,调用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

另一件事是您要发送:

data: "{ data : dataString }",

这只是一个字符串,但不是有效的 JSON。该dataString部分只是一些不引用任何内容的字符串字符。你可能的意思是:

data: { data : dataString },

这是一个引用 的真实对象dataString,并且该对象被转换为 JSON。

于 2012-06-06T10:45:20.503 回答