这是我想要做的:
我有一些这样的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;}
我发现它很奇怪,因为它除了最后一个大括号外都是其中的一部分
答案 0 :(得分:2)
为什么不使用“普通”查询字符串?
http://example.com/?type=test&id=26443
$type = $_GET['type'];
$id = $_GET['id'];
除非我遗漏了什么?
答案 1 :(得分:2)
这已经有了jQuery功能!使用它并喜欢它。
答案 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字符串。咄。