2013-08-24 41 views
4

我試圖通過url.But發送JavaScript數組失敗如何通過URL來發送一個數組的JavaScript/jQuery的

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),對位陣列不發送任何更多的和其他部分(mode=1)的 對是將這樣的:

somePDFView/[object Object] 

這顯示了錯誤:

The URI you submitted has disallowed characters

我們如何通過url發送數組。我不能使用Ajax(因爲它是一個彈出窗口)或會話或存儲在一個臨時表中。我們怎樣才能在控制器中檢索這個值。

編輯:

我想念一個重要的事情,我使用codeigniter。那麼我想它不允許特殊字符,如 - &,=,[,],etc..So如果可用於發送數據的陣列中的任何其他方法..

+2

您可能想要使用[serialize](http://api.jquery.com/serialize/)或[param](http://api.jquery.com/jQuery.param/) – Brewal

+0

您可以編碼它。但是URL的最大長度是發送我想要的變量,所以不要太長。 – putvande

+0

序列化? k我將研究那個並嘗試它... – manuthalasseril

回答

8

從JavaScript通過URL發送則params的數組PHP /笨,你需要遵循2個步驟:

  1. 將您的params數組轉換爲JSON字符串並將其作爲單個查詢參數發送。
    para = JSON.stringify(para);
    window.open('somePDFView?params='+para,'_blank');

  2. 解碼查詢字符串PARAM(ⅰ。ËJSON字符串)在您的控制器
    $params = json_decode($_GET['params']);

現在,你可以通過$ PARAMS訪問你的控制器使用所有PARAMS。

你的代碼塊變爲:

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

嘗試了這一點,讓我知道,如果你仍然面臨着這個問題。

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

+0

對不起,它不工作... – manuthalasseril

+0

已編輯。代碼現在已經過測試和工作。 – 2013-08-24 10:19:18

+0

現在我可以在url上看到參數 - salesexePDFView/parat [] = 1&parat [] = 2,但它顯示您提交的URI不允許使用字符。 – manuthalasseril

2

使用jQuery.param(),改變你的數據結構:

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

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

Demo jsFiddle

+0

在警告它的工作,但在window.open它不工作.why ??? – manuthalasseril

+0

你不能這樣做。看到這[胎面](http://stackoverflow.com/questions/4907843/open-url-in-new-tab-using-javascript)或[this one](http://stackoverflow.com/questions/427479/programmatically-open-new-pages-on-tabs)。 – Brewal

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 variable.Also參考, http://php.net/manual/en/function.json-decode.php

+0

它的也顯示錯誤 - 您提交的URI不允許使用字符 – manuthalasseril

+0

使用console.log(json)並檢查在通過url發送之前要返回的數據 – raduns

+0

數據被正確分配,並且json包含所有值但它可以'發送 – manuthalasseril