2012-12-24 26 views
0

我已經創建了我的第一個AJAX,JSON項目,而無需繳納任何(啞)的問題,除了這個小問題:如何從簡單的對象文字中提取變量?

function processEvent(data) { 
var evt = $(data).text(); 
    } 

當我寫警報(EVT);我看到以下內容:

{meat:'beef',vegetable:'carrots',potato:'mashed'} 

我可以用下面的代碼中提取字從變量 'EVT' 牛肉':

evt.substr(7,4) 

但如果我寫:

evt.meat 

我收到一個錯誤:未定義。我怎樣才能直接檢索變量'肉'的價值,而不訴諸字符串操作?

回答

1

如果您evt數據是JSON,你可以分析它,並得到肉屬性。目前不是,這個{meat:'beef',vegetable:'carrots',potato:'mashed'}作爲JSON將是{"meat":"beef","vegetable":"carrots","potato":"mashed"}。注意使用雙引號而不是單引號,並且引用了屬性。

function processEvent(data) { 
var evt = $(data).text();// === {"meat":"beef","vegetable":"carrots","potato":"mashed"} 
    evtObj = $.parseJSON(evt); 
    alert(evtObj.meat); //shows beef 
} 
+0

我試過這個,於是我的MSIE腳本調試器告訴我在jQuery代碼的第2行有一個無效字符! **返回a.JSON.parse(b); ** – Commata

+0

@ user1781623是否改變了'{meat:'beef',vegetable:'carrots',potato:'mashed'}'to'{「meat」:「beef 」, 「蔬菜」: 「胡蘿蔔」, 「土豆」: 「搗碎」}'? – Musa

+0

對不起,將所有單引號更改爲雙引號後,一切正常!事件數據是一個包含ColdFusion變量的字符串,它們各自具有引用的特性。現在一切正常!謝謝你的幫助! – Commata

1

這是因爲此時您專門爲evt設置了一個字符串。根據data代表的內容(JSON字符串數據或從JSON解析的對象或DOM節點 - 我無法確定哪些代碼中沒有更多上下文),您可能需要做一些事情來獲取對象表示。至少你可以做這個字符串解析成JSON:

var evt = JSON.parse($(data).text()); 

但我的猜測是,你可能已經有一個對象表示,你是做成一個字符串通過調用text(),所以有可能是一些不必要的序列化/反序列化在這裏進行。

+0

Mike,在上面提到的所有JSON.parse函數的答案中,都會引發錯誤「無效字符」(MSIE Script debugger)。所以你很想知道背景是什麼。我使用ColdFusion查詢並將輸出服務器端格式化爲我的問題中顯示的大括號內的字符串。所以它以字符串的形式到達回調函數,這可能會解釋錯誤信息。使用$ .getJSON並沒有從服務器頁面獲取任何東西,因爲我現在寫了它。所以我不知道服務器頁面是否現在可用。我想我會嘗試一個ColdFusion論壇來修復該頁面。 FrankF – Commata

0
var obj = JSON.parse(data); 
var val = obj['meat']; 
+0

感謝您的回答,我無法正確測試,因爲我顯然在將數據發送到回調函數的服務器端頁面上存在嚴重錯誤。 – Commata

1

您需要使用JSON.parse()從JSON字符串轉換爲相應的數據。

var evt = JSON.parse($(data).text()); 
console.log(evt.meat); 

jQuery可以爲你自動做到這一點。或者:

  1. 撥打$.getJSON()來執行AJAX呼叫。
  2. 在AJAX調用的選項參數中指定dataType: 'json'
  3. 服務器發送的頭「內容類型:應用程序/ JSON」
+0

感謝您的回答,我無法正確測試,因爲我顯然在將數據發送到回調函數的服務器端頁面上存在嚴重錯誤。 – Commata

+0

Musa(上圖)幫助我更正數據字符串中的引號後,您的建議完美奏效。感謝您的幫助! Frank – Commata