php 如何通过 javascript/jQuery 中的 url 发送数组

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18417265/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-25 17:31:22  来源:igfitidea点击:

How to send an array via the url in javascript/jQuery

phpjavascriptjqueryarrayscodeigniter

提问by manuthalasseril

I am trying to send a javascript array via the url.But it fails

我正在尝试通过 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'); 
    }
}

On if part(mode=0), the para array is not sending any more and on else part (mode=1) the para is sends like this:

在 上if part(mode=0), para 数组不再发送,而在其他部分 ( mode=1) 上, para 发送如下:

somePDFView/[object Object]

Which shows the error:

其中显示错误:

The URI you submitted has disallowed characters

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

How can we send an array via url.I can't use Ajax (because its a popup window) or session or storing in a temporary table.Also how can we retrieve this value in the controller.

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

Edit:

编辑:

I miss an important thing that I am using codeigniter. Then I think it disallows special characters like - &,=,[,],etc..So if any other methods available for sending data as an array?..

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

回答by Siva

To send an array of params via URL from Javascript to PHP/Codeigniter, you need to follow 2 steps:

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

  1. Convert your params array to JSON String and send that as a single query param.
    para = JSON.stringify(para);
    window.open('somePDFView?params='+para,'_blank');

  2. Decode the query string param (i.e JSON string) at your controller
    $params = json_decode($_GET['params']);

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

  2. 在您的控制器解码查询字符串参数(即 JSON 字符串)
    $params = json_decode($_GET['params']);

Now you can use all the params at your controller by accessing through $params.

现在,您可以通过 $params 访问来使用控制器上的所有参数。

Your code block becomes:

您的代码块变为:

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

Try this out and let me know if you still faces this issue.

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

回答by raduns

You can also use Jsonhere. Use JSON.stringify().

您也可以Json在这里使用。使用JSON.stringify().

Note:Don't sent long data over a URL. There is a limit for sending data via url and it will end up in a corrupted data if exceeded the limit. For large data, use POSTmethod.

注意:不要通过 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'); 
  }
}

If you are using php, use json_decode()to convert json into PHP variable.Also refer, http://php.net/manual/en/function.json-decode.php

如果您使用的是php,请使用json_decode()将json 转换为PHP 变量。另请参阅 http://php.net/manual/en/function.json-decode.php

回答by manuthalasseril

You can try to pass them as individual parameters:

您可以尝试将它们作为单独的参数传递:

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)

Returns para[]=1&para[]=2. Note that this solution does not require jQuery.

返回para[]=1&para[]=2。请注意,此解决方案不需要jQuery.

回答by Brewal

Use jQuery.param()and change your data structure :

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

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

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

The Demo jsFiddle

演示的jsfiddle