2016-11-19 103 views
1

我即時通訊建設和數組,其中我的數組key是這樣一個變量:JavaScript數組鍵作爲變量

var product_id = $('#product_id').val(); //22 
var art = $('#article_id').val(); //229 
var stk = $('#stk').val(); //20 
var elements = []; 
elements [art] = stk; 
console.log(elements); 

這是結果

Array[229] 
228:"20" 
length:229 
__proto__:Array[0] 

console.log

正如你看到的結果,它實際上創造了229數組鍵,

當我做一個AJAX POST與變量。它發佈的所有229陣列項目給它。

option[]: 
option[]: 
option[]: 
option[]: 
option[]: 
option[]: 
option[]: 
option[]: 
option[]: 
option[]: 
option[]: 
option[]:20 

post object

很可能我只是想張貼1個鍵和值。

elements[229] = 20; 

並非所有的未使用。謝謝!

下面是我的Ajax調用

$.ajax({ 
      url: 'product/getprice', 
      type: 'post', 
      data: { product_id: product_id, option: element }, 
      dataType: 'text', 
      beforeSend: function() { 
      }, 
      complete: function() { 

      }, 
      success: function(json) { 

       json = JSON.parse(json); 

      }, 
      error: function(xhr, ajaxOptions, thrownError) { 
       alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); 
      } 
     }); 
+0

如果您發佈了代碼來發送發送完整數組的ajax調用,那將會有很大幫助。 –

+0

添加了ajax代碼,謝謝@ T.J.Crowder – Shiro

回答

3

你創建數組是稀疏陣列(一個有很多缺少項的數組)。這聽起來像什麼,那就是你使用序列化數組不處理稀疏數組你想要的方式,而不是充當雖然數組沒有稀疏。

所以,讓你至少有兩個選項:

  1. 更改序列化代碼。既然你還沒有表現出它,我們不能幫助你。

  2. 使用,而不是一個數組的對象:

    var elements = {}; // Note {}, not [] 
    

    無在已經證明上的其他代碼必須改變,但很有可能你的序列化代碼可能需要的,如果你改變做這個。

+0

使用對象,OP仍然可以使用分支語法訪問元素,即元素[229]。而不必要的稀疏結構被消除 – aliasav

+0

就是這樣。 ...... –

+1

我錯過了對象的概念,由於我的背景更多的是PHP。所以我的思想與數組鎖定在一起。感謝您的想法! – Shiro

0

您需要的對象不是一個數組。

更改elements變量語法是使用{ }對象,

[ ]代表的數組。

因此唯一需要的代碼改變是

var elements = {};

數組沒有一個鍵值型結構。對象有。

當你做你elements[229]實際上創建大小229的數組這是不是你想要的

+0

*「數組沒有鍵值類型結構。」*是的,他們這樣做。這就是爲什麼OP看到他所看到的行爲。實際上,JavaScript中的標準數組[根本不是真正的數組](http://blog.niftysnippets.org/2011/01/myth-of-arrays.html),只是對象具有特殊處理類屬性名稱和'length',它們使用'Array.prototype'作爲原型。 –

0

將其更改爲這種方式。

var elements = {}; 
elements [art] = stk;