JavaScript автоматически увеличивает переменную в jQuery и AJAX - PullRequest
2 голосов
/ 11 июня 2011

У меня есть JavaScript с использованием jQuery и AJAX, который создает динамический массив, в котором есть некоторые значения, используемые для запроса AJAX, как показано ниже:

<script type="text/javascript">
var array = Array("y","y","x","y","y","y");
function updateBackground(cellId, titleId) {
    var i = 0;
    $.ajax({
        type: "POST",
        url: "ajax.php",
        data: {
          filename: Array(array[i], "testdata", $("#"+titleId).html())
        },
        success: function(response){
          $("#"+cellId).css("background-image", "url('pdfthumb/" + response + "')");
        }
    });
i++;
}
</script>

Сценарий предполагает отправку значений в массив в array[i]за каждый запрос AJAX.Я сделал переменную var i, которая автоматически увеличивается .. Но скрипт не работает .. Сценарий работает хорошо, если array[i] заменен на array[0] или array[1] и т.д ..

Как я могурешить синтаксическую ошибку?

Ответы [ 5 ]

2 голосов
/ 11 июня 2011

Каждый раз, когда вы звоните updateBackground() я = 0 (снова). Может быть, вы должны инициализировать я вне функции.

Что будет, если i > array.length? И я бы переименовал переменную.

1 голос
/ 11 июня 2011

Каждый раз, когда вы вызываете функцию updateBackground(), переменная i повторно инициализируется. Это просто локальная переменная, и, как только функция завершает работу, она уничтожается GC. Вы могли бы сделать что-то вроде этого:

var UpdateBackground = {
    array: [..],
    counter: 0,

    doUpdate: function(cellId, titleId) {
        // AJAX request

        this.counter++;
    }
};

UpdateBackground.doUpdate(1, 1);
UpdateBackground.doUpdate(1, 1);
1 голос
/ 11 июня 2011

У вас нет итератора. Ваша переменная i устанавливается в 0 при каждом запуске функции. Приращение в конце бесполезно.

Может быть, вам нужно что-то подобное?

var array = Array("y","y","x","y","y","y");
function updateBackground(cellId, titleId) {
    for( var i = 0; i < array.length; i++ ) {
        $.ajax({
            type: "POST",
            url: "ajax.php",
            data: {
              filename: Array(array[i], "<?php echo $dir; ?>", $("#"+titleId).html())
            },
            success: function(response){
              $("#"+cellId).css("background-image", "url('pdfthumb/" + response + "')");
            }
        });
    }
}
0 голосов
/ 11 июня 2011

Я исправил это ... Огромное спасибо @Jed, @Pointy, @Crozin и @Lord Vader за то, что помогли мне разобраться ....:)

Я просто беру var i = 0; вне цикла .... выше var array like;

var i = 0;
var array = Array("y","y","x","y","y","x");
0 голосов
/ 11 июня 2011

Я думаю, что вы должны отправить весь массив, может быть, в виде строки, разделенной запятыми, и вместо этого сделать только один ajax-запрос, потому что http-запросы дороги и соответственно изменяют код на стороне сервера.И получить клетку в виде массива.Если вы думаете, что у вас длинный список или таблица, это может быть как много запросов.Делайте вещи в коде клиента и делайте вещи в коде сервера и сохраняйте как можно меньшее количество http-запросов.

И использовать метод соединения с массивом.

    var arr = [ 'y', 'y' ]; 
    arr.join(','); 
// outputs y, y 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...