$ .each выполняет итерацию по каждому символу в массиве - PullRequest
1 голос
/ 17 апреля 2011

Я создаю массив, извлекая данные из запроса json ajax. Но использование этого массива в другом операторе $.each приводит к итерации по каждому символу, а не по каждому значению.

var setInfo = [];

$.ajax({ 
  url: blah,
  async: false,
  dataType: 'json',
  success: function{
    $.each(data.photosets.photoset, function(i,photoinfo) {
            setInfo.push(photoinfo.id);
    }) // completed set values look like 1234,5678,etc..
  holler();
})

function holler() {
$.each(setInfo, function(index, value) {
    // using each array value in here splits into each 
    // character rather than each value. So rather than 
    // iterating through each whole value 1234,5678,etc.. 
    // It is iterating as 1,2,3,4,5,6,7,8,and so on.
    var url1 = "http://www.test.com/" + value;
    // Rather than http://www.test.com/1234, value is being evaluated as just 1
    // so the result is http://www.test.com/1
 });

Вот пример ответа json, в котором я получаю идентификатор:

    ({"photosets":{"photoset":
[{"id":"123456789", "primary":"102932423", "secret":"19ca84349a", "server":"5143", "farm":6, "photos":"52", "videos":0, "title":{"_content":"Thanksgiving 2010"}, "description":{"_content":""}}, 
{"id":"012345678", "primary":"1294872352", "secret":"983a9c58d1", "server":"5184", "farm":6, "photos":"12", "videos":0, "title":{"_content":"24th Birthday Dinner at McCormick and Schmitts"}, "description":{"_content":""}}]}, "stat":"ok"})

Edit:

Похоже, у меня есть кусок кода, который, я предполагаю, превращал массив в строку:

 setInfo += '';

Запустив мой код в консоли на firebug, а на stackoverflow, я могу видеть, что массив теперь отображается как [1234,5678] НО, работающий локально, я получаю странную ошибку jQuery:

uncaught exception: [Exception... "Could not convert JavaScript argument arg 0 [nsIDOMDocumentFragment.appendChild]"  nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)"  location: "JS frame :: http://code.jquery.com/jquery-1.5.js :: <TOP_LEVEL> :: line 5579"  data: no]

Line 0

Ответы [ 2 ]

1 голос
/ 17 апреля 2011

Я попробовал код, и он работает, как и ожидалось, с данными, которые вы предоставили.Я бы предложил использовать console.log внутри вашей функции, чтобы увидеть, что происходит в ваших массивах.

> x=    ({"photosets":{"photo set":[{"id":"123456789", "primary":"102932423",...
> xx=[]
> $.each(x.photosets.photoset,function(i,photoinfo){ xx.push(photoinfo.id); });
> xx
["123456789", "012345678"]
> $.each(xx,function(index,value){ console.log(value); });
123456789
012345678
0 голосов
/ 24 апреля 2016

Я прошел через ту же проблему. Мой ответ JSON от сервлета был простым массивом: ["один два"] Итерируя с помощью jquery ajax, он проходил через каждый символ, а не элементы в целом, хотя в конце сервлета тип содержимого ответа был установлен на «application / json». Затем я добавил dataType: 'json' в свойствах вызова ajax, это сработало.

$.ajax({
    type:'POST',
    data: {
        moduleName: moduleName,
        action: 'getSubModules'
    },
    dataType: 'json', //this one
    url:'AjaxController',
    success: function(response){
        $.each(response, function(index, value) {
            alert('value');
        });
    }
});

Я думаю, что раньше он рассматривал ответ в виде простой строки.

...