【问题标题】:loop executes only last array element using php, ajax and javascript循环使用 php、ajax 和 javascript 仅执行最后一个数组元素
【发布时间】:2017-12-19 06:11:19
【问题描述】:

您好朋友们正在尝试保存循环中的数据,这是我的代码。

<html>
 <head>
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
 </head>
<body onload="searchVideo();">
<?php
    ini_set('max_execution_time', 300);
    $query = "SELECT * FROM `playlists`";
    $result = mysqli_query($mysql,$query);
    while($row=mysqli_fetch_assoc($result)){
          $id=$row['id'];
          $playlists=$row['playlists'];
          $myArray = explode(',', $playlists);
              $length =  sizeof( $myArray);
              $myArray[0]=PLrEnWoR732-BHrPp_Pm8_VleD68f9s14-
              $myArray[1]=PLFgquLnL59ak1QNHmrUSjNM6WTegpgX__
              for ($i=0; $i<$length; $i++){
               echo "
                  <script>
                    var pageToken = '';
                    var numOfResult = 0;
                    var maxResults = 200;
                    function searchVideo(){
                    var separator = ',';
                    $.getJSON('https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=50&pageToken=' + pageToken + '&playlistId=$myArray[$i]&key=APIKEY&callback=?',function(data){
                    var l = data.items.length;
                    pageToken = data.nextPageToken;
                    numOfResult += l;
                    var itemUrl = '';
                    var videoids = [];
                    for(var i = 0; i < l; i++) {
                    if( i == 0) {
                        separator = ',';
                       }
                   else {
                       separator = ',';
                   }
                   var videoid = data.items[i].snippet.resourceId.videoId;
                   var title = data.items[i].snippet.title;

                   $.ajax({
                     method: 'POST',
                     url:    'add.php',
                    data: { title: title, videoid: videoid }
                   })
                  .done(function(data) {

                 });
              }

            if( numOfResult <= maxResults) {
               searchVideo();

            }
    });

}

    </script>
    ";
              }

    }



?>

添加.php

<?php
 $title = mysqli_real_escape_string($mysql,$_POST['title']);
 $videoid = mysqli_real_escape_string($mysql,$_POST['videoid']);
 $thumbnail_url = 'http://img.youtube.com/vi/'.$videoid.'/hqdefault.jpg';

  $sql = "INSERT INTO ytfb(name,video_name,thumbnail_url)     VALUES('$title','$videoid','$thumbnail_url')";
    $create_post_query=mysqli_query($mysql,$sql);
        if(!$create_post_query)
      {
        die("Connection failed".mysqli_error($mysql));
       }
 ?>

当我尝试在 add.php 中使用 ajax 保存数据时,仅保存最后一个数组元素中的元素 不保存第一个数组元素中的元素我如何能够保存所有数组元素中的数据.谁能帮我解决这个问题

【问题讨论】:

  • 这些行看起来很奇怪很奇怪。 $myArray[0]=PLrEnWoR732-BHrPp_Pm8_VleD68f9s14-。这应该是一个字符串吗?在它的当前格式中,这应该会引发错误。
  • 您将n * m 与相同的脚本元素相加,其中nplaylists 表中的行数,mplaylists 列中的播放列表数每行的Oo
  • @Andreas 我没看清楚你能告诉我那里的错误是什么
  • @Andreas 我只需要更改每个循环的播放列表,所以我给出了循环数组的 $myArray[$i]
  • 您在每次通过时都在用不同的主体重新定义相同的功能。我认为这不会正常工作。

标签: javascript php jquery arrays ajax


【解决方案1】:

在循环外定义函数searchVideo,并组织调用不同的参数。在循环中更改全局变量或 searchVideo 的输入参数。 现在你得到了这个结果,因为 finaly 执行了这个函数的最后一个实例。

【讨论】:

    【解决方案2】:
     for(var i = 0; i < l; i++) {
                        if( i == 0) {
                            separator = ',';
                           }
                       else {
                           separator = ',';
                       }
                       var videoid = data.items[i].snippet.resourceId.videoId;
                       var title = data.items[i].snippet.title;
    

    这里 i 将是最后一个元素的索引,因此只存储最后一个元素。 您必须在循环中循环 ajax 调用才能保存所有元素。

    【讨论】:

    • 我如何通过循环进行 ajax 调用,因为 ajax 调用在循环中
    猜你喜欢
    • 2021-09-02
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    相关资源
    最近更新 更多