2016-06-11 3 views
0

У меня есть ответ json, который я получаю с сервера с различными структурами ответа.Получить значение из ассоциативного массива со строкой

Один использует другое значение "данные", чтобы сохранить ссылку:

, а другие нет (с "изображением" быть ссылка):

Мне было интересно, есть ли способ получить «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

Однако ИМО функция пытается сделать слишком много , Зачем нужно разбирать 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 Это довольно захламленный, как есть. Я решил, что положить все в этот метод сделает его более понятным. Благодарим за решение. –

Смежные вопросы