2016-06-11 40 views
0

我有一個JSON響應,我從不同的響應結構的服務器獲取。獲得來自關聯數組值與字符串

One使用另一個值 「數據」 來存儲的鏈接:

,而另一個不確實(用 「圖像」 作爲鏈接):

我想知道是否有一種方法,我可以從關聯數組中使用可重用方法獲取「data.link」,其中linkVariableName是關聯數組的關鍵字。

function addLink(responseText, successVariableName, isError, linkVariableName) 
{ 
    var jsonResponse = JSON.parse(responseText); 

    var state; 
    if (isError) 
     state = !jsonResponse[successVariableName]; 
    else 
     state = jsonResponse[successVariableName]; 

    if (state) { 
     var link = jsonResponse[linkVariableName]; 
     insertAtCursor(textArea, '[img]' + link + '[/img]\r\n'); 
    } else 
     console.log('Error: ' + responseText); 
} 

,所以我可以使用

addLink(response.responseText, 'success', false, 'data.link'); 

addLink(response.responseText, 'error', true, 'image'); 
+0

你如何確定哪些參數的傳遞給函數? –

+0

注意:JavaScript沒有關聯數組。 – gcampbell

+0

@gcampbell我用json和關聯數組關聯。 –

回答

1

當然可以,因爲這裏說明:Accessing nested JavaScript objects with string key

然而,IMO函數試圖做太多。爲什麼需要解析JSON並提取值?你可以只直接傳遞價值給它:

function addLink(link) { 
    insertAtCursor(textArea, '[img]' + link + '[/img]\r\n'); 
} 

你在哪裏處理響應移動另一個邏輯:

var isError = ...; 
var response = JSON.parse(responseText); 

if (isError && !response.error) { 
    addLink(response.image); 
} else if(!isError && response.success) { 
    addLink(response.data.link); 
} else { 
    console.log('Error: ' + responseText); 
} 
+0

http://i.imgur.com/CxeKSpZ.gif 這是相當混亂,因爲它是..我想在這種方法把一切都讓它多了幾分清晰。 謝謝你的解決方案。 –