如何通过 javascript/jQuery 中的 url 发送数组
Posted
技术标签:
【中文标题】如何通过 javascript/jQuery 中的 url 发送数组【英文标题】:How to send an array via the url in javascript/jQuery 【发布时间】:2013-08-27 08:34:19 【问题描述】:我正在尝试通过 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 数组不再发送,而在 else 部分 (mode=1
)
para 是这样发送的:
somePDFView/[object Object]
显示错误:
您提交的 URI 包含不允许的字符
我们如何通过 url 发送一个数组。我不能使用 Ajax(因为它是一个弹出窗口)或会话或存储在一个临时表中。我们如何在控制器中检索这个值。
编辑:
我错过了我正在使用 codeigniter 的重要事情。然后我认为它不允许特殊字符,如 - &、=、[、] 等。那么是否有任何其他方法可用于将数据作为数组发送?..
【问题讨论】:
您可能想使用serialize 或param 您可以对其进行编码。但是我认为 URL 有一个最大长度来发送变量,所以不要太长。 序列化? k 我会研究那个并尝试一下...... 不要使用非数字键的数组! 我认为你应该先研究一下为什么string + array
会产生奇怪的结果... (提示:将汽车与苹果结合起来会发生什么?)
【参考方案1】:
要通过 URL 从 Javascript 向 php/Codeigniter 发送参数数组,您需要执行 2 个步骤:
将您的参数数组转换为 JSON 字符串并将其作为单个查询参数发送。
para = JSON.stringify(para);
window.open('somePDFView?params='+para,'_blank');
在您的控制器上解码查询字符串参数(即 JSON 字符串)
$params = json_decode($_GET['params']);
现在您可以通过 $params 访问来使用控制器中的所有参数。
你的代码块变成:
函数视图报告(模式,someid) 如果(模式==0) 变量参数=新数组(); 参数['para1'] = '参数1'||0; para['para2']='para2' || 0; console.log(para); para = JSON.stringify(para); window.open('somePDFView?params='+para,'_blank'); 别的 变量参数=[]; 变量参数= 参数 1:'另一个参数 1'||0, para2:'另一个para2'||0 ; para[0]=副元素; para = JSON.stringify(para); window.open('somePDFView?params='+para,'_blank');试试这个,如果你仍然遇到这个问题,请告诉我。
【讨论】:
【参考方案2】:您也可以在此处使用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
【讨论】:
它也显示错误-您提交的URI包含不允许的字符。 使用 console.log(json) 并在通过 url 发送之前检查正在返回的数据。 数据已正确分配,json 包含所有值但无法发送 您是否使用查询字符串发送数据? 对不起,我错过了一件重要的事情。我正在使用 codeigniter,所以我认为它不允许像 &,=,[,] 这样的特殊字符。对吗?【参考方案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&para[]=2
。请注意,此解决方案不需要jQuery
。
【讨论】:
现在我可以在 url--salesexePDFView/parat[] = 1¶t[] = 2 上看到参数,但它显示您提交的 URI 包含不允许的字符。 我删除了parat[]
和=
符号之间的空格。它现在应该可以工作了。【参考方案4】:
使用 jQuery.param() 并更改您的数据结构:
var para =
para1:'anotherpara1'||0,
para2:'anotherpara2'||0
;
window.open('somePDFView/'+jQuery.param(para), '_blank');
Demo jsFiddle
【讨论】:
你不能这样做。请参阅此tread 或this one。以上是关于如何通过 javascript/jQuery 中的 url 发送数组的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 javascript/jquery 事件控制 youtube iframe 声音
如何区分手动滚动(通过鼠标滚轮/滚动条)和 Javascript/jQuery 滚动?
如何通过 Javascript / jQuery 在按钮单击时显示引导警报?
如何使用 javascript/jquery 禁用表单中的所有内容?