当前位置: 首页 > 知识库问答 >
问题:

Ajax响应重复循环两次以显示数据

习高格
2023-03-14

下面是我的ajax:它显示从php脚本从数据库获取的数据。我在php页面中var_dump结果以查看数组大小。它说数组大小(11)。

但是当传递给ajax页面时,它返回11数据两次。我使用console.log($data.length)查看返回的数据集数量。虽然它显示11两次。请问在我下面的代码中什么使循环显示两次?

$("form").on("submit", function () {
    var data = {
        "action": "test"
    };

    data = $(this).serialize() + "&" + $.param(data);
    $.ajax({
        type: "POST",
        dataType: "json",
        url: "ajax2.php",
        data: data,

        success: function (data) {

            getData=data;
            $("#main_content").slideUp("normal",function(){
            $(".the-return").show();
           if(data!=""){
               console.log(data.length);
            for (i = 0; i < data.length; i++) {
$(".the-return").append("<div class='inside_return'><section class='row'><div class='small-12 medium-6 large-10 large-centered columns d_result'><div class='text-center post_id'>" + data[i].id +"</div><div class='small-12 medium-12 large-9 columns subject'>"+ data[i].subject+" Instructor</div><div class='small-12 meidum-12 large-3 columns rate'>" + data[i].rate +"</div><span class='hourly'>hourly</span><div class='small-12 medium-12 large-12 text-center name'>" + data[i].name +"</div><div class='small-12 medium-12 large-4 columns plusneg'><img src='img/happy.png'>" + data[i].plus+"<br/><img src='img/sad.png'>"+ data[i].neg+"</div><div class='small-12 medium-12 large-4 columns gender text-center'>Male<br/>Availabiliy:<br/>Mornings:" + data[i].weekM+"<br/>Afternoons:<br/>"+ data[i].endA+"Evening:"+ data[i].weekE+"</div><div class='small-12 medium-12 large-4 columns score text-center'><h6>Reputation score</h6>"+ data[i].reputation+"</div><div class='row'><div class='small-12 medium-12 large-5 columns shortlist text-center'>Add to Shorlist</div><div class='small-12 medium-12 large-5 columns gettutor text-center'>Get Tutor</div></div><div class='small-12 medium-12 large-12 columns text-center date'>Posted on:<span class='elec'>15 Apr 2015</span></div></div></section></div>");

            //alert(data[i].name) 
            }
           }else{
               $(".the-return").hide();
               $(".the-return-fail").slideDown(1000);
           }

            });//closes #main_content
        }


    });
    return false;


});

PHP脚本

<?php
if (is_ajax()) {
  if (isset($_POST["action"]) && !empty($_POST["action"])) { //Checks if action value exists
    $action = $_POST["action"];
    switch($action) { //Switch case for value of action
      case "test": test_function(); break;
    }
  }
}

//Function to check if the request is an AJAX request
function is_ajax() {
  return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
}

function test_function(){
 $return = $_POST;
 //$return='{"sub":{"1":"","2":""},"postcode":"56000","slider1":"100","action":"test"}';



 $return["json"] = json_encode($return);
 // echo json_encode($return);
 $data = json_decode($return["json"], true);
  //var_dump($data);

include('inc/config.php');



$postcode=$data['postcode'];


$rate=$data['slider1'];

$key =array_keys($data['sub']); 
//print_r($key);
$pricing2 = $data['slider1'];
$pricing = $pricing2 * 1.90;
$postcode = $data['postcode'];


$bindings = array();
$bindings[] = array(":pricing", $pricing, PDO::PARAM_STR);
$bindings[] = array(":postcode", $postcode, PDO::PARAM_STR);

$key_placeholders = array();
foreach($key as $k => $v) {
    $placeholder = ":subid".$k;
    $bindings[] = array($placeholder, $v, PDO::PARAM_INT);
    $key_placeholders[] = $placeholder;
}

$sql = "SELECT * FROM posts,subjects "
        . "WHERE posts.subid IN (". implode(",",$key_placeholders).") "
        . "AND posts.pricing <=:pricing "
        . "AND posts.Poscode=:postcode "
        . "AND posts.subid=subjects.subid "
        . "ORDER BY posts.Poscode "
        . "DESC LIMIT 60";

$statement = $pdo->prepare($sql);
foreach($bindings as $b) {
    $statement->bindValue($b[0],$b[1],$b[2]);
}
$statement->execute();
$json = array();
while( $row = $statement->fetch()) {
    array_push($json, array("name" => $row['Name'], "id" => $row['PostUUID'],"rate" => $row['pricing'],"postcode" => $row['Poscode'],"subject" => $row['subname'],"reputation" => $row['Reputation'],"plus" => $row['ReviewPlus'],"neg" => $row['ReviewNeg'],"weekM" => $row['week_morning'],"weekA" => $row['week_afternoon'],"weekE" => $row['week_evening'],"endM" => $row['weekend_morning'],"endA" => $row['weekend_afternoon'],"endE" => $row['weekend_evening'],"postDate" => $row['date']));
}
header('Content-Type: application/json');
echo json_encode($json);
//var_dump($json);
}

?>

共有1个答案

宗政霄
2023-03-14

我在表格提交后添加了这一行,以避免重复提交。

$('form').submit(function(){
  **$(this).find(':submit').attr('disabled','disabled');**
});
 类似资料:
  • 我有一个endpoint生成一些数据(需要一些时间),另一个endpoint可以用来获取生成的数据。我用wait调用第一个,从响应中获取id,并想调用第二个,而它的状态不是“Success”(它表示响应中准备和存储的数据),并继续我的脚本。 这是我的代码 它的工作,但我赢得了这么多的请求,我如何设置一些请求的间隔?我尝试使用await setInterval(),但是代码继续执行,没有等待结果 e

  • 下面的代码循环了两次。第一个while循环要求用户输入(以做出选择)。我把选择默认值设置为“n”,使它变得更简单。 因此,它命中if语句并开始第2个while循环。现在它要求用户进行另一个选择。用户只能输入“a”,因为其他任何东西都会出现错误陷阱。用户输入“a”并得到添加一个数字的提示(变量num=0)。用户输入一个数字。 使用更多信息更新的代码 我已经尝试使用不同的变量进行选择。它不起作用。我想

  • 此方法重复读取命令并执行它们,直到游戏结束。完成的变量为true时,表示玩家/用户点击了退出并想要结束游戏——从而退出循环并执行到方法结束。 但我观察到循环有一种奇怪的行为。它循环得非常好(省略以下行时显示stopWatch.getTime()的连续计数: 但是当我把它们放回去时,它会停止显示秒表的连续递增时间,因为它会朝着时间限制增加(在这一点上,它应该停止)。即使玩家没有输入任何命令或输入。

  • 正如这里看到的,有两种方法可以重复某事很多次。但是它似乎对我不起作用,所以我想知道是否有人能帮忙。 基本上,我想重复以下3次 根据链接所说,这就是我所做的, 但这似乎行不通。while循环只重复一次,而不是三次。有人能帮我解决这个问题吗?

  • 我如何在x个循环之后暂停我的循环x秒? 我的循环逐行读取IP地址列表。在50个循环之后,它应该暂停x秒,直到循环继续。

  • 我需要以这样的方式使用两个循环:外循环驱动内循环进行2、4、8、16和32次迭代的计算。 例如,如果i=2(对于外循环),则内循环将迭代4次 如果i=3,则内部循环将迭代8次,依此类推。 这就是我使用的逻辑 如果有任何建议,我将不胜感激