5

我正在尝试通过 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]

显示错误:

所提交的网址带有不被接受的字符

我们如何通过 url 发送数组。我不能使用 Ajax(因为它是一个弹出窗口)或会话或存储在临时表中。我们如何在控制器中检索这个值。

编辑:

我错过了我正在使用 codeigniter 的重要事情。然后我认为它不允许特殊字符,如 - &、=、[、] 等。所以如果有任何其他方法可用于将数据作为数组发送?

4

4 回答 4

9

要通过 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');
    }
}

试试这个,如果你仍然面临这个问题,请告诉我。

于 2014-04-29T10:04:29.190 回答
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

于 2013-08-24T10:12:12.457 回答
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.

于 2013-08-24T10:03:48.087 回答
2

使用jQuery.param()并更改您的数据结构:

var para = {
    para1:'anotherpara1'||0,
    para2:'anotherpara2'||0
};

window.open('somePDFView/'+jQuery.param(para), '_blank'); 

演示jsFiddle

于 2013-08-24T10:11:47.793 回答