php $ _POST ['data'。$ i]增加数字`$ i`

时间:2011-08-06 17:57:41

标签: php jquery post

也许这是一个奇怪的问题。我有很多按钮传递值与jquery。他们非常相似。所以我试着将它们与数字增加结合起来。

的index.php

<script type="text/javascript" src="../jquery.js"></script>
<script type="text/javascript">
jQuery(document).ready(function(){
for (var i = 0; i <5; i++){
    $('.click'+i).click(function(){
        $.ajax({
            url: "data.php", 
            dataType: "html",
            type: 'POST', 
            data: "data"+i+"="+i,
            success: function(data){ 
                $("#result"+i).html(data);
            }
        });
    });
}
});
</script>

<a class="click1">aaa</a>
<a class="click2">bbb</a>
<a class="click3">ccc</a>
<a class="click4">ddd</a>
<a class="click5">eee</a>
<?php
for ($i=1; $i<=5; $i++){
echo '<div id="result'.$i.'"></div>';
}
?>

但是$_POST['data'.$i]是一个意想不到的T_ECHO,所以如何编写以便我不会在data.php中重新开始工作

data.php

<?php
for ($i=1; $i<=5; $i++){
$_POST['data'.$i]{
    echo $_POST['data'.$i];
//some stuff, most are similer, less code diferent use if else for $_POST['data1'] - $_POST['data5']
}
}
?>

3 个答案:

答案 0 :(得分:2)

编辑:oops,这不是原始海报关注的修复,而是该代码将展示的另一个问题(我认为这是OP的问题)。我将此保留给后人。

这似乎表明它与JS闭包有一个共同的问题。假设你有这个JavaScript代码。

for (var i=1; i<5; i++) {
    $('.click'+i).click(function() {
         alert("Clicked " + i);
    });
 }

你可能期待:

$(".click1").click(function() { alert("Clicked 1"); });
$(".click2").click(function() { alert("Clicked 2"); });
$(".click3").click(function() { alert("Clicked 3"); });
$(".click4").click(function() { alert("Clicked 4"); });
$(".click5").click(function() { alert("Clicked 5"); });

实际上,这是:

$(".click1").click(function() { alert("Clicked 6"); });
$(".click2").click(function() { alert("Clicked 6"); });
$(".click3").click(function() { alert("Clicked 6"); });
$(".click4").click(function() { alert("Clicked 6"); });
$(".click5").click(function() { alert("Clicked 6"); });
//
//               Notice that they're all "6" --^

...因为click事件中的所有内容都使用i的相同实例,该实例在循环结束时变为6。

修复第一

此版本将为每次迭代创建一个新的变量范围,它将i的值“烘焙”到新创建的函数中。

for (var i=0; i<5; i++) {
    $('.click'+i).click((function(i) {
         return (function() {
             alert("Clicked " + i);
         });
    })(i));
 }

这是一个相当困难的概念。谷歌周围有类似“迭代关闭javascript”的东西,以找到更多有关正在发生的事情的深入解释。

修复第二个

这个不太优雅,但更容易理解。

for (var i=0; i<5; i++) {
    // Store the 'i' in the element itself...
    $('.click'+i).data('index', i);

    // ...then retrieve it later
    $('.click'+i).click(function () {
         alert("Clicked " + $(this).data('index'));
    });
 }

这个使用jQuery的i方法将.data的值存储在元素本身中。您可以使用i

,而不是在事件中引用$(this).data('index')

答案 1 :(得分:0)

for ($i=1; $i<=5; $i++){
    echo $_POST['data'.$i];
}

没问题

此外,还可以使用data[]data[5]作为字段名称 它将在数组 $_POST['data']

中提供

答案 2 :(得分:-1)

如果你这样给予

 for ($i=1; $i<=5; $i++)
 { 
  echo $_POST['data'.$i]; 
 }//it seams like $_POST['data'1];

所以试试

 for ($i=1; $i<=5; $i++)
 { 
  echo $_POST["data$i"]; 
 }