2013-04-09 65 views
0

我在設置jquery ajax方法的data屬性時遇到問題,以便包含具有名爲EngineSpecs的屬性的JavaScript對象。設置jquery ajax方法的數據屬性以包含具有數組屬性的javascript對象

我想出了這樣的測試,但它不工作:

var myObject = new Object(); 
myObject.EngineSpecs = {}; 


var data = { 
     myObject.EngineSpecs : [{ 
      EngineID: 100010017, 
      Displacement: 7.2, 
      Gas: false 
      }, { 
      EngineID: 300200223, 
      Displacement: 3.2, 
      Gas: true 
     }] 
}; 

$.ajax({ 
     url: someurl, 
     dataType: "json", 
     data: myObject 

我不斷收到這樣的錯誤:

消息「:」發生錯誤「」 ExceptionMessage 「:」無法反序列化當前的JSON對象

任何幫助將不勝感激!

+1

除了答案和以前的評論,在你的ajax調用你設置數據:myObject,我認爲它應該是數據:data – TommyBs 2013-04-09 16:09:29

+0

當在循環中填充屬性值時,這將如何工作?不覆蓋以前的條目? - 感謝 – SkyeBoniwell 2013-04-09 16:49:34

回答

1

您正試圖使用​​myObject.EngineSpecs作爲對象屬性名稱,這是不允許的(因爲中間是。)。做到這一點,而不是:

var data = { 
     myObject: { 
      EngineSpecs : [{ 
       EngineID: 100010017, 
       Displacement: 7.2, 
       Gas: false 
      }, { 
       EngineID: 300200223, 
       Displacement: 3.2, 
       Gas: true 
      }] 
     } 
}; 

或者可能你真正想要的是什麼:

var myObject = { 
     EngineSpecs : [{ 
      EngineID: 100010017, 
      Displacement: 7.2, 
      Gas: false 
     }, { 
      EngineID: 300200223, 
      Displacement: 3.2, 
      Gas: true 
     }] 
    }; 
+0

我認爲這將用於測試。在循環中填充屬性值時,這將如何工作? – SkyeBoniwell 2013-04-09 16:52:07

+1

不知道。我還沒有看到你的代碼的其餘部分。聽起來好像它應該是一個單獨的問題 - 當然,在你自己嘗試之後。 – Blazemonger 2013-04-09 16:53:51

+0

好點,我會給它一個鏡頭 – SkyeBoniwell 2013-04-09 16:55:13

1

有幾個問題,你的代碼這似乎缺乏的JS對象和對象屬性的理解幹。瞭解這些將爲您節省數小時的頭痛。

第一件事(小事一件)我想指出的是混合你的對象聲明。

var myObject = new Object(); 
// is the equivalent of: 
var myObject = {}; 

類似與數組:

var myArray = new Array(); 
//is the equivalent of: 
var myArray = []; 

不要緊,你選擇去與模式(JS社區喜歡的[]和{}),但要確保你和你的方法是一致的。其次,將對象視爲關聯數組,即關鍵字 - >值對的列表。這些鍵被稱爲對象屬性。所以,所有對象都應該遵循以下模式:

// Note: each object property declaration is comma separated. 
var myObject = { 
    propertyString: 'this is a string', 
    propertyAnotherString: 'this is another string', 
    propertyMixedArray: ['item 1', 'item 2', 1, 2, {}], 
    // Note above, we have different data types in the array: 
    // two strings, two ints and one empty object. 
    // This is completely legal in javascript. 
    propertyObject: { someProperty: 'and so on...' } 
}; 

// Adding additional properties is OK too. 
// Note: this time we use '=' instead of ':' to assign value 
myObject.additionalProperty = 'Additional property'; 

// prints 'this is a string' 
console.log(myObject.propertyString); 

// also prints 'this is a string' 
// I'm treating object as an associative array or hashtable 
console.log(myObject['propertyString']); 

// also prints 'this is a string' 
// we can use variables as well to dynamically access keys. 
var keyFromVariable = 'propertyString'; 
console.log(myObject[keyFromVariable]); 

// Couple of other examples. 
console.log(myObject.propertyMixedArray[1]); // prints 'item 2' 
console.log(myObject.propertyObject.someProperty); // prints 'and so on...' 
console.log(myObject.additionalProperty); // prints 'Additional property' 

這可能是壓倒性的開始,但你會隨着時間的推移習慣了。但是,在編寫JavaScript代碼時,始終將您的想法始終放在頭腦中很重要。現在我們對對象有了更多的瞭解,我們可以用以下方式重寫您的代碼:

var myObject = { 
    EngineSpecs: [{ 
     EngineID: 100010017, 
     Displacement: 7.2, 
     Gas: false 
     }, { 
     EngineID: 300200223, 
     Displacement: 3.2, 
     Gas: true 
    }] 
}; 

$.ajax({ 
    url: 'http://www.someurlhere.com/api.json', 
    dataType: "json", 
    data: myObject 
}); 

我希望這會有所幫助。

相關問題