2014-06-27 39 views
1

嗨,大家好我是新來的jQuery,我也遇到過這類問題,阿賈克斯 - 操縱一個正確的數組傳遞給PHP

我試圖創建jQuery的陣列來將它傳遞到PHP控制器( CI)。

樣本HTML

<input type="text" acc_id="5" class="input" /> 
<input type="text" acc_id="10" class="input" /> 
<input type="text" acc_id="15" class="input" /> 
<input type="text" acc_id="20" class="input" /> 

的Javascript

$('#save').click(function(){ 

    var arrayVal = []; 

    $('.input').each(function(key, value){ 

     var id = $(this).attr('acc_id'); 
     var inputValue = $(this).val(); 

     arrayVal[id] = inputValue; 

    }); 

    $.ajax({ 
     url: siteurl + '/sample_save', 
     type: 'POST', 
     dataType: 'json', 
     data: {'accounts' : arrayVal}, 
     success: function(data) {} 
    }); 

}); 

這是我在Php響應

Array 
(
    [array] => Array 
    (
     [0] => 
     [1] => 
     [2] => 
     [3] => 
     [4] => 
     [5] => value 1 
     [6] => 
     [7] => 
     [8] => 
     [9] => 
     [10] => value 2 
     [11] => 
     [12] => 
     [13] => 
     [14] => 
     [15] => value 3 
     [16] => 
     [17] => 
     [18] => 
     [19] => 
     [20] => value 4 
    ) 

) 

注意,響應給了我從0鍵 - 20

但是我想這樣:

Array 
(
    [array] => Array 
    (
     [5] => value 1 
     [10] => value 2 
     [15] => value 3 
     [20] => value 4 
    ) 
) 

我可以以某種方式使它在PHP中工作,但我想通過我的JavaScript代碼糾正這個東西。對不起,我的英語不好:)

回答

2

你是對的。這顯然是你的JS代碼應該解決的問題。

jQuery具有表單的本地序列化函數。有關使用它的示例,請參閱here,這可能是解決問題的更好方法。

另請注意,javaScript沒有real關聯數組。您只能以類似的方式使用對象,因爲您知道來自其他語言(如PHP)的關聯數組。

編輯

好了,在這種情況下你的代碼就可以了。你只需要使用一個對象而不是一個數組。

只需使用:

var arrayVal = {}; 

相反的:

var arrayVal = []; 
+0

我沒有這個字段的表單,我只是爲屬性acc_id(對於密鑰ID)和它的值進行提取,嘿嘿 – user3782892

+0

@ user3782892我明白了。我更新了我的答案。 – s1lv3r

+1

wooahh,這套設置,謝謝!真棒。 – user3782892

1

在你的PHP文件試試這個代碼:

$test = array('','',1,2,'',3); //your array 
foreach($test as $i=>$k) 
{ 
    if(empty($k)) 
    { 
     unset($test[$i]); 
    } 
} 
print_r($test); 

輸出:

Array ([2] => 1 [3] => 2 [5] => 3) 

或者你可以使用過濾

代碼:

$test = array('','',1,2,'',3); 
$test = array_filter($test); 
print_r($test); 
+0

感謝的人,這部作品在PHP,但我一直在尋找精確的JS解決方案,反正銀幫了我,但是再一次,這是未來的一件事。 :) – user3782892

0
 //You can use this function and it's remove to empty array 
    <?php 
      array_filter($array); 
     ?> 



    http://www.php.net/manual/en/function.array-filter.php