2011-06-11 70 views
2

我使用jQuery和AJAX创建了一个动态数组,其中包含一些用于AJAX请求的值,如下所示;JavaScript在jQuery和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]等替代..

我该如何解决语法错误?

+0

你是什么意思不工作?究竟发生了什么? – 2011-06-11 16:07:52

+0

我认为这是由于关闭。在'updateBackground'函数之前尝试'var i = 0;''。 – 2011-06-12 16:15:19

回答

0

我固定它。谢谢你这么多@Jed,@Pointy,@Crozin和@Lord维达帮助我的数字出来.... :)

我只拿var i = 0;以外的循环....以上var array喜欢;

var i = 0; 
var array = Array("y","y","x","y","y","x"); 
1

您没有迭代器。每次运行函数时,我的变量都会被设置为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

如果他打算能够在“成功”功能中访问“我”,那么这是行不通的。只有一个“我”,它由循环中创建的每个“成功”处理程序共享。 – Pointy 2011-06-11 16:12:04

+0

虽然他没有成功使用我? – glortho 2011-06-11 16:15:11

+0

你的代码很酷..但它不适用于第一个数组元素,即数组[0]和其他所有其他工作良好.. – 2011-06-11 16:51:52

1

每次调用updateBackground()功能时,i变量被重新初始化。它只是一个局部变量,只要函数完成,它就会被GC破坏。你可以这样做:

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

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

     this.counter++; 
    } 
}; 

UpdateBackground.doUpdate(1, 1); 
UpdateBackground.doUpdate(1, 1); 
+0

是的,这是问题。 – Pointy 2011-06-11 16:13:28

+0

谢谢@Crozin我知道它固定了... :) – 2011-06-11 17:15:26

2

每次你打电话给updateBackground() i = 0(再次)。可能是你必须在函数之外初始化我。

如果i > array.length会发生什么情况?我会重命名变量。

+0

谢谢.. @Lord Vader我懂了... :) – 2011-06-11 17:14:58

0

我认为你应该发送整个数组作为一个逗号分隔的字符串,而不是只做一个ajax请求,因为http请求是昂贵的,并相应地更改服务器端代码。并将cellids作为数组获取。 如果您认为自己有很长的列表或表格,它可能会有很多请求。在客户端代码中执行这些操作,并在服务器代码中执行这些操作,并尽可能减少http请求的数量。

并在数组上使用连接方法。

var arr = [ 'y', 'y' ]; 
    arr.join(','); 
// outputs y, y