来自json的url中的php数组

时间:2010-04-12 14:38:01

标签: php javascript jquery json arrays

这是我想要做的:

我有一些这样的json

  var foo = {
   format:"json",
   type:"test",
   id:"26443"
  };

我不想把它放在像这样的网址中

 'http://example.com/a:3:{s:6:"format";s:4:"json";s:4:"type";s:4:"test";s:2:"id";s:5:"26443";}'

然后我将进入ajax调用,但我尝试过的所有内容都会导致错误501 BAD URI有人会告诉我该怎么做

我试过这个 修改

再次查看并警告此函数的结果后,它构建结果正确它们只是不是通过ajax或浏览器使用propler

 function js_array_to_php_array(a) {
  var a_php = "";
  var total = 3;

  for (var key in a){
   total;
   a_php = a_php + "s:" + String(key).length  + ":\""  + String(key) + "\";s:" + String(a[key]).length  +  ":\"" + String(a[key])  + "\";";
  }
  a_php = "a:" + total +":{" + a_php + "}";
  return a_php;
 }

当我使用http fox时,它会回来

 http://example.com/a:3:%7Bs:6:%22format%22;s:4:%22json%22;s:4:%22type%22;s:4:%test%22;s:2:%22id%22;s:5:%2226443%22;}

我发现它很奇怪,因为它除了最后一个大括号外都是其中的一部分

5 个答案:

答案 0 :(得分:2)

为什么不使用“普通”查询字符串?

http://example.com/?type=test&id=26443

$type = $_GET['type'];
$id   = $_GET['id'];

除非我遗漏了什么?

答案 1 :(得分:2)

这已经有了jQuery功能!使用它并喜欢它。

http://api.jquery.com/jQuery.param/

答案 2 :(得分:1)

因此事实证明js_array_to_php_array函数没有任何问题,因为我需要它来解决这个问题,因为我需要在运行我的ajax调用时使用JSONP而不是JSON,因为我正在跨越域,这也解释了为什么代码在url中工作但在我运行ajax

时却没有

谢谢大家的帮助

答案 3 :(得分:0)

http://example.com/a:3:{s:6:"format";s:4:"json";s:4:"type";s:5:"test";s:2:"id";s:5:"26443";}

501是对的 - 这不是有效的网址。 URL肯定不能包含引号,或者(大多数情况下)大括号。

如果您真的必须在URL中提交PHP文字结构而不将其作为常规查询参数集进行操作,则必须对无效字符进行URL编码,您可以这样做:

url= 'http://example.com/'+encodeURI(js_array_to_php_array(foo));

导致:

http://example.com/a:3:%7Bs:6:%22format%22;s:4:%22json%22;s:4:%22type%22;s:5:%22test%22;s:2:%22id%22;s:5:%2226443%22;%7D

顺便说一句:

String(key)

是多余的:对象键在JS中始终是字符串,即使您将它们作为数字放入;

"\""  + String(a[key]) + "\""
如果值可以包含引号或反斜杠,

将会出错

total;

这里肯定会有增量吗?

答案 4 :(得分:0)

在PHP端,您可以使用urlencode(json_encode($obj))将对象转换为可在URL中使用的字符串。

发布此内容后,我意识到您在看到var foo = {后尝试将JavaScript变量转换为URL字符串。咄。