Jquery 将json字符串转换为object并返回$。post work$。ajax不起作用

Jquery 将json字符串转换为object并返回$。post work$。ajax不起作用,jquery,ajax,arrays,json,Jquery,Ajax,Arrays,Json,我刚刚了解到js中的数组不能包含key to value,所以我正在寻找将数组从js传递到php并返回的选项。当我搜索相关信息时,我找到了json选项。 但我发现js不完全支持,除非在我的例子json2.js中添加插件。 我有两个不同的代码,$。post工作正常,$。ajax不工作。 如果您能告诉我为什么$,我会很高兴。ajax不起作用,您有完整的代码可以测试。 json2.js来自.thx $.ajax代码: $.ajax({ type: "POST",

我刚刚了解到js中的数组不能包含key to value,所以我正在寻找将数组从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('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);
      });
*
$。post
代码:

 $.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('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>

Json测试
$(文档).ready(函数(){
var data=新对象();
data.hello=“hello”;
data.world='world';
data.worked=“it worked”;
data.somebool=true;
data.array=新数组(“he\'ll\'o','World');
警报(data.hello);
var-dataString=JSON.stringify(数据);
警报(数据串);
$.post('phpfile.php',{data:dataString},函数(res){
警惕(“成功”);
var obj=jQuery.parseJSON(res);
if(obj.somebool==true)
$(“#result”).html(obj.hello+''+obj.array[1]+obj.worked+”。来自PHP的消息:“+obj.PHP_消息);
});
});
php代码:

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

在您的
$.ajax()请求中,您已经设置了
数据类型:“json”
,这意味着响应将已经是一个json对象,而不是一个表示json的字符串。因此,调用
var obj=jQuery.parseJSON(res)实际上对您没有任何帮助。直接使用
res

等效的
$.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);
}, 'json');

另一件事是您正在发送:

data: "{ data : dataString }",
这只是一个字符串,但不是有效的JSON。
dataString
部分只是一些字符串,它们不引用任何内容。你可能是说:

data: { data : dataString },

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

如果您有jQuery,则不需要json2库-正如您所展示的那样,有
jQuery.parseJSON
。您在哪个浏览器中测试了此代码?因为JSON全局对象在某些浏览器中不可用。这就是为什么需要json2.js。