【问题标题】:jQuery ajax array to jsonjQuery ajax 数组到 json
【发布时间】:2011-12-31 13:58:32
【问题描述】:

如果我想将一个数组从 PHP 发送到 JavaScript,我可以用 PHP 做这样的事情:

<?php
    $json=array();
    $json['datetime']="Something";
    $json['timestamp']="Something else"
    $encoded=json_encode($json);
    die($encoded);
?>

这在 jQuery/JavaScript 上(使用 Ajax):

...
success: function(response){
var chat = jQuery.parseJSON(response);
datetime=chat['datetime'];
timestamp=chat['timestamp'];
...

我想知道是否要做相反的事情。

在 jQuery 中我有这个数组:

data_send['username']=$(".chat_username").val();
data_send['message']=$(".chat_message").val();

我想将此数组编码为 JSON 对象,通过 Ajax 发送此对象,然后从 $_POST/$_GET 获取此对象并将其解码为数组。

我该怎么做?

【问题讨论】:

  • 你想像.post()一样将数据从客户端发送到服务器?
  • @ChrisPappas 为什么?将键值对发送到 CGI 脚本有一个标准格式,它是 not JSON!
  • @Alnitak 现在我使用类似data: "name="+escape($(".chat_username").val())+"&amp;message="+escape($(".chat_text").val()), 这不适用于特殊字符和希腊字符(utf-8 编码)
  • @Chris 因为您应该使用地图,而不是字符串 - 请参阅我的答案。
  • @ChrisPappas 也检查stackoverflow.com/a/2473382/1114171 如果你仍然有问题基本上建议使用encodeURIComponent

标签: php jquery json object


【解决方案1】:

如果您想将数组从 Javascript 编码为 JSON,您可以使用 JSON.stringify(myarray)

但是,您不应该这样做以将其发送到 PHP 脚本。

jQuery 内置支持在 POST 方法中传递键值对映射 - 只需将其作为 $.ajax() 中的 data 参数或作为第二个参数传递给 $.post()

然后,jQuery 将正确地对出现的任何不安全字符进行 URI 编码(无论是键还是值),因此在您的情况下,您可以使用:

var data_send = {
     username: $(".chat_username").val(),
     message:  $(".chat_message").val()
};
$.post(url, data_send, success_handler);

// or $.ajax({url: url, data: data_send, ... });

PHP 然后内置了对读取该地图的支持 - 它是$_POST:

<?php
    $username = $_POST['username'];
    $message  = $_POST['message'];
?>

【讨论】:

  • 那么在 php $data_send=json_decode($_POST['data_send']);$username=$data_send['username']; 我对吗?
  • @ChrisPappas 不-您根本不需要对其进行 JSON 编码或解码-这就是我回答的重点。我已经用一个例子更新了它。
  • &lt;br /&gt; &lt;b&gt;Notice&lt;/b&gt;: Undefined index: username in &lt;b&gt;C:\xampp\htdocs\apps\chat\chat_write.php&lt;/b&gt; on line &lt;b&gt;2&lt;/b&gt;&lt;br /&gt; &lt;br /&gt; &lt;b&gt;Notice&lt;/b&gt;: Undefined index: message in &lt;b&gt;C:\xampp\htdocs\apps\chat\chat_write.php&lt;/b&gt; on line &lt;b&gt;4&lt;/b&gt;&lt;br /&gt;
  • @ChrisPappas NB 我已经更新了示例代码以使其更清晰 - 原始代码只是从您自己的代码中复制了一个 sn-p,它本身是不完整的。
  • @ChrisPappas 正确 - 正如预期的那样,您已将 data_send 设为一个数组,根据我上面更新的代码,它实际上应该是一个对象。
猜你喜欢
  • 2011-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多