JavaScript 或 jQuery 中的变量递增

4
我正在开发一个Twitter小部件,它在代码开始时声明了tweetCount。它同时使用PHP和JavaScript。我试图通过硬编码来清理我已经工作的代码,简单地复制和粘贴,显然这是一个可怕的方法,特别是当我想稍后修改推文计数时。我知道在PHP中,您可以创建一个变量,根据循环中的迭代递增值,即tweet1,tweet2,tweet3等。我想知道如何在JavaScript或jQuery中实现相同的效果。下面是我目前拥有的JavaScript示例代码。如果您想查看完整脚本,请单击此处。如何自动递增JavaScript或jQuery中的代码?我看了这个stackoverflow帖子,但没有完全理解如何将其集成到我的代码中。可以在此处找到实时示例。非常感谢任何帮助。

编辑:

更新代码以反映PHP从Twitter API的JSON feed中获取的方式的性质

编辑2:

切换到纯JavaScript,使其更加清洁易用,除了清理代码并使所有调用都在客户端进行。我会更新代码以反映它。感谢您的建议和帮助!

编辑3:[最终结果]

所以我承诺要发布最终代码。这是结果,感谢您的帮助。我还从我的朋友那里得到了一点帮助。单击此处链接。有任何问题吗?请随时与我联系,我很乐意回答。通过切换到纯JavaScript,我删除了大约40行代码,以便您可以看到它有多么有用!此外,由于安全原因,Twitter API不允许客户端调用,所以我不得不在PHP中进行调用。很遗憾不能全部使用JavaScript完成,但我想我们必须接受脚本中的一些PHP。纯JavaScript中的代码更加清晰!

使JavaScript成为可能的代码:

<?php
    $tweetData = file_get_contents("https://api.twitter.com/1/statuses/user_timeline.json?screen_name=$username&count=$tweetCount");
    echo "<script> var tweets = " . $tweetData . ";</script>";
?>

初始代码:

<?php for($i = 0; $i < $tweetCount; $i++) { ?>
    ${"tweet{$i}"} = $decode[$i][text];
    ${"tweetTime{$i}"} = $decode[$i][created_at];
    <script type="text/javascript">
       var i = "<?php echo $i ?>";
       var tweetTime1 = "<?php echo ${"tweetTime{$i}"} ?>";
       var datebefore1 = new Date(tweetTime1.replace(/^\w+ (\w+) (\d+) ([\d:]+) \+0000 (\d+)$/, "$1 $2 $4 $3 UTC"));
       var tempdate1 = datebefore1.toString();
       var date = "GMT-0800 (Pacific Standard Time)";
       var date1 = tempdate1.split(date)[0];
    </script> <?php
} ?>

1
永远不要在同一个文件中编写JavaScript和PHP!使用<script>标签以允许浏览器缓存和更好的代码维护。 - Aram Kocharyan
为什么不用“$i”替换“1”呢? - bozdoz
我会只使用JavaScript来完成这个任务。如果是JSON(JavaScript对象表示法),我假设你可以使用$.get()并从那里开始工作。 - Aram Kocharyan
@AramKocharyan 我看了一下$.get(),不太确定如何解析我需要的数据。我目前是用${"tweet{$i}"} = $decode[$i][text];来做的,其中decode是从json_decode生成的。我从这个链接中找到了这个想法,然后根据我的需求进行了修改。 - Elias Ranz
在JavaScript中没有必要解码JSON,因为它是JavaScript对象的子集。 - Aram Kocharyan
显示剩余6条评论
2个回答

3
你可以将所有的php数据存入js变量中,然后在纯js中使用,不要再混合使用它们。
//['item1','item2','item3'],js array formation
var jsData = <?php echo $decode ?>;
var jsCount = <?php echo $tweetCount ?>;
for(var i=0;i<jsCount;i++){
    alert(jsData[i]);
}

//或者

<script type="text/javascript">
<?php 
for ($i = 0; $i < $tweetCount; $i++) {
?>
    //here you can get your tweet1,tweet2,tweet3...
    var tweet<?php echo $i ?> = "<?php echo $i ?>"+'any data you want to append.';  
<?php
}
?>
</script>

你想根据 PHP 创建许多 JS 变量吗?因此,PHP 将首先在服务器上执行,然后在 HTML 文件中生成 HTML 和 JS。因此,您也可以使用数组。 - meadlai
我该如何获取我要查找的确切值?例如,在 PHP 版本中,它类似于 $decode[$i][text];,其中 i 是循环迭代,即 $decode[0][text]; 是第一条推文,$decode[1][text]; 是第二条,以此类推。 - Elias Ranz
我已经更新了我的代码,你可以试一下。记住:PHP会在JavaScript之前执行。 - meadlai
我想表达的是,你如何获取我要查找的文本,比如这里的推文文本?请参考此链接,了解JSON在布局方面的输出情况。我知道如何在PHP中使用它,但不知道如何在JS中与之交互,这就是为什么我选择了PHP路线。如果使用JS可以让编码变得更容易,我完全可以转换到JS。 - Elias Ranz
选择这个答案是因为这最终是我所做的。我改用JSON来获取数据,然后在PHP中将其存储在一个变量中,这实际上是一个JavaScript变量。 - Elias Ranz

2
为了简单起见,您可以按以下方式从$tweetCount数组创建JavaScript数组:
$temp = "var temp = new Array();";
for($i = 0; $i < $tweetCount; $i++) {
   $temp.="temp.push(new Array(".$tweetCount[$i].")";
} 

请在您的JavaScript脚本标签中输出此$temp变量。之后,您可以按照以下方式在JavaScript脚本中使用temp数组:

for(var i=0;i<temp.length;i++){
    console.log(temp[i]);
}

我在控制台上得到了以下错误 Uncaught ReferenceError: temp is not defined,尽管它不应该是从 $temp.=... 行生成的吗? - Elias Ranz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接