【问题标题】:How to send an array via the url in javascript/jQuery如何通过 javascript/jQuery 中的 url 发送数组
【发布时间】: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 的重要事情。然后我认为它不允许特殊字符,如 - &、=、[、] 等。那么是否有任何其他方法可用于将数据作为数组发送?..

【问题讨论】:

  • 您可能想使用serializeparam
  • 您可以对其进行编码。但是我认为 URL 有一个最大长度来发送变量,所以不要太长。
  • 序列化? k 我会研究那个并尝试一下......
  • 不要使用非数字键的数组!
  • 我认为你应该先研究一下为什么string + array 会产生奇怪的结果... (提示:将汽车与苹果结合起来会发生什么?)

标签: php javascript jquery arrays codeigniter


【解决方案1】:

要通过 URL 从 Javascript 向 PHP/Codeigniter 发送参数数组,您需要执行 2 个步骤:

  1. 将您的参数数组转换为 JSON 字符串并将其作为单个查询参数发送。
    para = JSON.stringify(para);
    window.open('somePDFView?params='+para,'_blank');

  2. 在您的控制器上解码查询字符串参数(即 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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 2016-03-21
    • 2013-01-09
    • 2015-09-30
    相关资源
    最近更新 更多