如何通过 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&parat[] = 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 禁用表单中的所有内容?

如何访问 json php 中的数组到 javascript/jquery

rails javascript jquery:通过页面部分时导航栏标题中的粗体效果