php 如何通过 javascript/jQuery 中的 url 发送数组
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/18417265/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to send an array via the url in javascript/jQuery
提问by manuthalasseril
I am trying to send a javascript array via the url.But it fails
我正在尝试通过 url 发送一个 javascript 数组。但它失败了
function viewReport(mode,someid){
if(mode==0){
var para= new Array();
para['para1'] = 'para1'||0;
para['para2']= 'para2' || 0;
console.log(para);
window.open('somePDFView/'+para,'_blank');
}else{
var para=[];
var paraelements={
para1:'anotherpara1'||0,
para2:'anotherpara2'||0
};
para[0]=paraelements;
window.open('somePDFView/'+para,'_blank');
}
}
On if part(mode=0)
, the para array is not sending any more and on else part (mode=1
) the
para is sends like this:
在 上if part(mode=0)
, para 数组不再发送,而在其他部分 ( mode=1
) 上, para 发送如下:
somePDFView/[object Object]
Which shows the error:
其中显示错误:
The URI you submitted has disallowed characters
所提交的网址带有不被接受的字符
How can we send an array via url.I can't use Ajax (because its a popup window) or session or storing in a temporary table.Also how can we retrieve this value in the controller.
我们如何通过 url 发送数组。我不能使用 Ajax(因为它是一个弹出窗口)或会话或存储在临时表中。此外,我们如何在控制器中检索此值。
Edit:
编辑:
I miss an important thing that I am using codeigniter. Then I think it disallows special characters like - &,=,[,],etc..So if any other methods available for sending data as an array?..
我错过了使用 codeigniter 的重要事情。然后我认为它不允许像 - &、=、[、] 等特殊字符。所以如果有任何其他方法可用于将数据作为数组发送?..
回答by Siva
To send an array of params via URL from Javascript to PHP/Codeigniter, you need to follow 2 steps:
要通过 URL 从 Javascript 向 PHP/Codeigniter 发送参数数组,您需要执行以下 2 个步骤:
Convert your params array to JSON String and send that as a single query param.
para = JSON.stringify(para);
window.open('somePDFView?params='+para,'_blank');
Decode the query string param (i.e JSON string) at your controller
$params = json_decode($_GET['params']);
将您的 params 数组转换为 JSON 字符串并将其作为单个查询参数发送。
para = JSON.stringify(para);
window.open('somePDFView?params='+para,'_blank');
在您的控制器解码查询字符串参数(即 JSON 字符串)
$params = json_decode($_GET['params']);
Now you can use all the params at your controller by accessing through $params.
现在,您可以通过 $params 访问来使用控制器上的所有参数。
Your code block becomes:
您的代码块变为:
function viewReport(mode,someid){ if(mode==0){ var para= new Array(); para['para1'] = 'para1'||0; para['para2']= 'para2' || 0; console.log(para); para = JSON.stringify(para); window.open('somePDFView?params='+para,'_blank'); }else{ var para=[]; var paraelements={ para1:'anotherpara1'||0, para2:'anotherpara2'||0 }; para[0]=paraelements; para = JSON.stringify(para); window.open('somePDFView?params='+para,'_blank'); } }
Try this out and let me know if you still faces this issue.
试试这个,如果您仍然面临这个问题,请告诉我。
回答by raduns
You can also use Json
here. Use JSON.stringify()
.
您也可以Json
在这里使用。使用JSON.stringify()
.
Note:Don't sent long data over a URL. There is a limit for sending data via url and it will end up in a corrupted data if exceeded the limit. For large data, use POST
method.
注意:不要通过 URL 发送长数据。通过 url 发送数据是有限制的,如果超过限制,它将以损坏的数据结束。对于大数据,使用POST
方法。
function viewReport(mode,someid){
var json;
if(mode==0){
var para= new Array();
var paraelements={
para1:'para1'||0,
para2:'para2'||0
};
para[0]=paraelements;
json = JSON.stringify(para);
window.open('somePDFView/'+json,'_blank');
}else{
var para=[];
var paraelements={
para1:'anotherpara1'||0,
para2:'anotherpara2'||0
};
para[0]=paraelements;
json = JSON.stringify(para);
window.open('somePDFView/'+json,'_blank');
}
}
If you are using php, use json_decode()
to convert json into PHP variable.Also refer,
http://php.net/manual/en/function.json-decode.php
如果您使用的是php,请使用json_decode()
将json 转换为PHP 变量。另请参阅
http://php.net/manual/en/function.json-decode.php
回答by manuthalasseril
You can try to pass them as individual parameters:
您可以尝试将它们作为单独的参数传递:
var para1 = '1';
var para2 = '2';
var para= new Array();
para.push('para[]=' + para1 || 0);
para.push('para[]=' + para2 || 0);
var url = para.join('&');
alert(url)
Returns para[]=1¶[]=2
. Note that this solution does not require jQuery
.
返回para[]=1¶[]=2
。请注意,此解决方案不需要jQuery
.
回答by Brewal
Use jQuery.param()and change your data structure :
使用jQuery.param()并更改您的数据结构:
var para = {
para1:'anotherpara1'||0,
para2:'anotherpara2'||0
};
window.open('somePDFView/'+jQuery.param(para), '_blank');
The Demo jsFiddle