2013-08-01 4 views
0

У меня есть объект массива, содержащий массивы.Добавление строки в массив, заполненный массивами

var webApps = [ 
    ['leave empty'] 
]; 

Я ajaxing в некотором содержании и в конце Аякса результате строка будет выглядеть примерно так:

ajaxResult = ',["Alex","Somewhere, NY, 11334"],["Zak","Cherryville, FL, 33921"]'; 

Мой вопрос, как я взять возвращенную строку и добавить его в WebApps массив? Спасибо всем!

Дэмиен

+0

Не могли бы вы сделать «ajaxResult» действительным [JSON] (http://json.org/), может быть? – Bergi

+0

К сожалению, у меня нет контроля над этим. – Damien

ответ

0

Сначала преобразует результат в нечто распознаваемо (я надеюсь, что никаких других причуд необходимо):

var jsonStr = "["+ajaxResult.slice(1)+"]"; 
// [["Alex","Somewhere, NY, 11334"],["Zak","Cherryville, FL, 33921"]] 
// would be better if it looked like that in the first place 

Теперь мы можем разобрать его и нажать отдельные элементы в массиве:

var arr = JSON.parse(jsonStr); 
webApps.push.apply(webApps, arr); 

Мы могли бы использоваться цикл, как хорошо, но push может принимать несколько аргументов, так что легче apply его.

+0

Мне удалось получить следующее: [["alex", "где-то ..."] ["zak", "cher ..."]]. Я попытался сделать что-то вроде этого: data.replace ('] [', '], ['), но это не сработало. – Damien

+0

Я думаю, было бы лучше с запятой. Может быть, замена не сработала, потому что она заменила только одну границу массива? Попробуйте 'data.replace (/ \] \ [/ g,"], [")' вместо – Bergi

+0

Я получил замену на работу. Теперь он выглядит так, как вы прокомментировали строку json. Я получаю сообщение об ошибке, когда я его запускаю (Неисправность Syntax Error: Неожиданный токен o). вот код, который я использую: http://jsfiddle.net/grem28/uHT4s/ – Damien

1

Как отметил @Bergi, было бы неплохо сделать ваш звонок ajax действительным JSON. Если это еще не то, что у вас есть контроль над, то вам нужно, чтобы превратить его в корректный JSON, разобрать его, и concat к webApps массива:

var webApps = [ 
    ['leave empty'] 
]; 

var ajaxResult = ',["Alex","Somewhere, NY, 11334"],["Zak","Cherryville, FL, 33921"]'; 

//strip the comma 
ajaxResult = ajaxResult.substring(1); 

//surround with [] 
ajaxResult = "[" + ajaxResult + "]"; 

//parse 
ajaxResult = JSON.parse(ajaxResult); 

//and concat 
webApps = webApps.concat(ajaxResult); 
+0

Вот код, который я использую. Я изменил его, чтобы выглядеть так, как вы мне даете. Я действительно получаю сообщение об ошибке: объект не имеет метода подстроки. http://jsfiddle.net/grem28/DyJnj/. Весь этот код, который я использую, - это то, что я использую, чтобы получить его для этой строки, ["alex"]. – Damien

+1

'$ ('# ajaxResults'). Html ($ ('# mArray'). Text())' будет устанавливать содержимое, а не возвращать его. Вместо этого он вернет список узлов или что-то в этом роде. –

+0

что вы предлагаете? – Damien

-1

Если Аякса результатом является строка, вы можете преобразовать его в объект и добавьте каждое свойство в webapps var.

var data = eval('(' + ajaxResult + ')'); // data is a javascript array now, do anything you want 
+1

Что мне делать с начальной запятой, разве это не сбрасывает? – Damien

+0

просто удалите его. 'ajaxResult = ajaxResult.substring (1);' –

0

Следующие действия выполняются, если браузер поддерживает JSON.

var webApps = [ 
    ['leave empty'],['one'] 
]; 
var str = JSON.stringify(webApps); 
// "[["leave empty"],["one"]]" 

str = str.substr(0, str.length-1); 
//"[["leave empty"],["one"]" 

//var arr = eval(str + ajaxResult + "]"); 
// more secure way 
var arr = JSON.parse(str + ajaxResult + "]"); 
+1

Но когда он поддерживает JSON, нет абсолютно никакой причины использовать 'eval' ??? – Bergi

+0

Быстрее использовать eval, но если вы хотите проверить (более безопасный), JSON.parse более подходит. Так может быть и причина :). – Zafer

+0

Кроме того, это стоит прочитать: http://stackoverflow.com/questions/1843343/json-parse-vs-eval – Zafer

0

webApps = eval("[['"+(webApps[0]).toString()+"']"+ajaxResult+"]");

Это странно, но решить вопрос.

+0

Я делаю это: http://jsfiddle.net/grem28/keg4s/, у меня теперь ajaxResult выглядит так: [[ "тест", "тест"], [ "тест", "тест"]]. Я получаю сообщение об ошибке в строке eval: Uncaught SyntaxError: Неожиданный идентификатор – Damien

+0

Не используйте 'eval'! – Bergi

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