我正在尝试通过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');
}
}
在if part(mode=0)
上,para数组不再发送,而在其他部分(mode=1
)
para是这样发送的:
somePDFView/[object Object]
显示错误:
您提交的URI已禁止使用字符
我们如何通过url发送数组。我不能使用Ajax(因为它是一个弹出窗口)或会话或存储在临时表中。我们如何在控制器中检索这个值。
编辑:
我想念一个重要的事情,我正在使用codeigniter。然后我认为它不允许使用特殊字符,如 - &,=,[,]等。如果有任何其他方法可用于将数据作为数组发送?...
答案 0 :(得分:8)
要通过URL从Javascript向PHP / Codeigniter发送一系列参数,您需要执行以下两个步骤:
将params数组转换为JSON String并将其作为单个查询参数发送。
para = JSON.stringify(para);
window.open('somePDFView?params='+para,'_blank');
解码控制器上的查询字符串参数(即JSON字符串)
$params = json_decode($_GET['params']);
现在,您可以通过$ params访问控制器中的所有参数。
您的代码块变为:
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'); } }
尝试一下,如果您仍然面临此问题,请告诉我。
答案 1 :(得分:6)
您也可以在此处使用Json
。使用JSON.stringify()
。
注意:强>
不要通过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');
}
}
如果您使用的是php,请使用json_decode()
将json转换为PHP变量。另请参阅,
http://php.net/manual/en/function.json-decode.php
答案 2 :(得分:3)
您可以尝试将它们作为单独的参数传递:
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)
返回para[]=1¶[]=2
。请注意,此解决方案不需要jQuery
。
答案 3 :(得分:2)
使用 jQuery.param() 并更改您的数据结构:
var para = {
para1:'anotherpara1'||0,
para2:'anotherpara2'||0
};
window.open('somePDFView/'+jQuery.param(para), '_blank');