2015-03-30 3 views
1

У меня есть цикл for, который дает массив json и заполняет его в таблице вместе с переменными другого списка. Моя проблема в том, что я не могу получить доступ к i внутри метода get. Но у меня есть mylist и все его содержимое внутри. Я попытался привязать функцию к переменной i, используя bind (this, i), но это говорит о том, что .getJSON() не является функцией. Вот соответствующий код.Переменная цикла привязки JQuery к функции getJSON

var mylist = ["a", "b", "c"] 
for (i = 0; i < mylist.length; i++) { 

    urlstr = "/" + mylist[i]; // Generate url 
    $.getJSON(urlstr, function(data) { 
     html = "<tr><td>" + mylist[i] + "</td><td>" + data.string[0] + "</td></tr>"; 
     $("#tableresult").append(html); //this returns undefined for mylist[i] 
     console.log(i); //this returns 3 which is the length of list 
    }); 

} 

Короче, мне нужно, чтобы переменные вне getJSON были доступны в пределах getJSON. Может кто-нибудь помочь? Спасибо и приветствую.

+0

Вы, кажется, есть некоторые пограничные вопросы строки. – JLRishe

+0

urlstr = "/" + mylist [i]; , , попробуйте это –

+0

Проблема с 'i' является' 3' заключается в том, что вы перебираете элементы, вызывая getJSON, но до того, как вызывается первый обратный вызов, цикл уже выполняется, в результате чего 'i' составляет 3 для каждого обратного вызова. –

ответ

2

Это не должно быть ничем не отличается от связывания переменную цикла практически любого другого цикла. Поскольку вы работаете с массивом, чистейший подход заключается в использовании Array#forEach:

var mylist = ["a", "b", "c"]; 
mylist.forEach(function (item) { 
    var urlstr = "/" + item; 
    $.getJSON(urlstr, function(data){ 
     var html = "<tr><td>" + item + "</td><td>" + 
        data.string[0] + "</td></tr>"; 
     $("#tableresult").append(html); 
     console.log(item); 
    }); 
}); 
+0

Это хорошо работает, но предположим, что у меня есть еще несколько переменных вне getJSON и этой функции, как бы я их получил внутри? – Tania

+0

Например, у меня есть другая переменная myvar = 5 рядом с моим списком. Как мне получить доступ к нему внутри? – Tania

+0

@Tania Вы можете просто использовать его, как обычно. Не должно быть проблемой, если ее значение не претерпевает изменений во время запросов. – JLRishe

1

, пожалуйста, убедитесь, что ваши данные возврата php - json.

, например:

$data['something'] = 'data'; 
echo json_encode($data); 

и используя функцию для индекса GET (я):

$.getJSON("demo_ajax_json.js", function(result){ 
     $.each(result, function(i, field){ 
      $("div").append(field + " "); 
     }); 
    }); 
+0

Это, безусловно, json – Tania

+0

в порядке, попробуйте: $ .each (результат, функция (i, поле) { $ ("div"). Append (поле + ""); }); –

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