向服务器发送JSON,使用jQuery

5

我正在尝试将简单数据发送到服务器,并且我需要一种“粗略但可行”的方式来实现这一点。

目前为止,我已经做了以下工作:

var emails = ['a@123.com', 'b@123.com', 'c@123.com'];

var ruff_json = "{ 'emails': [";
for (i in emails)
    ruff_json += ((i == 0) ? '' : ', ') + '\''+emails[i]+'\'';

ruff_json += '] }';

jQuery.ajax({
    type: 'POST',
    url: '1.php',
    data: ruff_json,
    dataType: "json",
    timeout: 2000,
    success: function(result){
        //do something
    },
    error: function (xhr, ajaxOptions, thrownError){
        //do something
    }
});

使用Firebug,我可以看到数据被POST到服务器 - 然而,在服务器上,没有数据($_POST为空) - 我做错了什么?

2
你应该使用一个JSON编码库,而不是自己编写。试试:https://code.google.com/p/jquery-json/ - limscoder
3个回答

7

我们使用json发布所有数据。

var myobj = { this: 'that' };
$.ajax({
  url: "my.php",
  data: JSON.stringify(myobj),
  processData: false,
  dataType: "json",
  success:function(a) { },
  error:function() {}
});

然后在PHP中我们这样做:

<?php
  $json = json_decode(file_get_contents("php://input"), true);
  // Access your $json['this']
  // then when you are done
  header("Content-type: application/json");
  print json_encode(array(
    "passed" => "back"
  ));
?>

这样,我们甚至不需要操作post变量,而且通常比让jQuery处理它们更快。

最终,结合使用jSONLint、jquery-json和直接从php://input读取的方法帮助我解决了这个问题。最让我震惊的是,尽管数据被POST为JSON,但它并没有出现在$_POST中。我选择这个答案只是因为它包含了大部分有效的观点,并且Jeremy花时间提供了一些代码来演示他的意思。 - oompahloompah
иҝҷжҳҜеӣ дёәеҸ‘еёғзҡ„JSONдёҚжҳҜPHPжңҹжңӣеЎ«е……$_POSTзҡ„ж јејҸгҖӮе®ғжӣҙзұ»дјјдәҺеҸ‘еёғж–Ү件пјҢе°Ҫз®Ўе®ғдёҚдјҡеҮәзҺ°еңЁ$_FILESдёӯгҖӮ - Rahly

2

您的数据字段应该包含键值对对象,因为它会被编码为POST键值对。

data = {my_json: encoded_string};

然后在PHP端,您可以这样访问数据:
$data = json_decode($_POST['my_json']);

0

PHP通过解析接收到的数据来填充$_POST。但是,它只知道表单编码数据,无法自动解析JSON数据。因此,在这种情况下,$_POST将无用。您需要获取原始POST数据并使用json_decode进行解析。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接