【问题标题】:Returning a while loop from an AJAX request从 AJAX 请求返回一个 while 循环
【发布时间】:2017-06-04 01:11:28
【问题描述】:

我正在尝试从 AJAX 请求返回一个 while 循环,同时还返回其他数据。

基本上,我目前正在从 php 请求返回 3 或 4 组数据,并在返回时将它们传递到我的应用程序中。但我需要能够遍历一组数据以打印到表格中。

我所有的代码都在工作,我没有收到任何错误,只是没有正确返回我的设备数组。

我已经很接近了,我想我知道我的问题是什么,我只是暂时想不出如何解决它。

Javascript

function getDataViaAjax(id, days) {
    $.ajax({
        url: 'assets/processes/getWebsiteStatsData.php', // URL of php command
        type: 'POST', //TYPE
        data: {'id': id, 'days': days}, //Variables in JSON FORMAT
        success: function(results) {
            //SUCCESSFUL REQUEST FUNCTION
            var result = $.parseJSON(results);
            document.getElementById("websiteStatisticsDiv").style.display = "block";
            document.querySelector("#websiteStatisticsURL > strong").innerHTML = result.dataArray.url;
            document.querySelector("#websiteStatisticsBounceRate").innerHTML = result.dataArray.bounceRate;
            document.querySelector("#websiteStatisticsDiv > div > div.col-lg-4.col-md-4.col-sm-12.col-xs-12.left > div > div").style.width = result.dataArray.bounceRate;
            document.getElementById("websiteStatisticsConversionRate").innerHTML = result.dataArray.conversionRate;
            document.querySelector("#websiteStatisticsDiv > div > div:nth-child(2) > div > div").style.width = result.dataArray.conversionRate;
            var arrayLength = result.phonesArray.device.length;
            for (var i = 0; i < arrayLength; i++) {
                document.getElementById("arrayTest").innerHTML = JSON.stringify(result.phonesArray.device);
            }
        }
    }); // end ajax call
};

PHP

<?php
include "../includes/includes.php";
$id = $_POST['id'];
$conversionRateDays = $_POST['days'];

$getSites = $db->query_assoc("SQL QUERY GOES HERE");
$getBounceRate = $db->query_assoc("SQL QUERY GOES HERE");
$getConversionRate = $db->query_assoc("SQL QUERY GOES HERE")
$getPhoneResults = $db->query_assoc("SQL QUERY GOES HERE");

$url = $getSites['main_url'];
$bounceRate = $getBounceRate['result'];
$conversionRate = $getConversionRate['result'];
$dataArray = array('url' => $url,'bounceRate' => $bounceRate, 'conversionRate' => $conversionRate);
$results = array('dataArray' => $dataArray, 'phonesArray' => $getPhoneResults);
echo json_encode($results, JSON_FORCE_OBJECT);
?>

如果我跑的那一刻

console.log(result.phonesArray.device);

它只返回我的数据库的第一行,但如果我在这样的 for 循环中运行它

for (var i = 0; i < arrayLength; i++) {
    console.log(result.phonesArray.device[i]);
}

它返回第一行的单个字母。例如,我的第一行是 iPhone,上面的命令将循环遍历并将每个字母记录为单独的对象。

我在想我需要将返回的每一行保存为单独的数组对象,例如设备、设备 1、设备 2、设备 3、设备 4,因为它每次都保存设备数组名称并且只返回 1 个结果。

任何帮助将不胜感激!

【问题讨论】:

    标签: javascript php arrays ajax while-loop


    【解决方案1】:

    如果不查看您的 phoneArray 变量中的实际内容,很难说,但您正在做的事情看起来有点可疑:

     var arrayLength = result.phonesArray.device.length;
    

    假设(基于名称并且它是数据库查询的结果集)您尝试处理的数组是 phonesArray,这不应该是:

     var arrayLength = result.phonesArray.length;
    

    然后您可以访问以下成员:

     for (var i = 0; i < arrayLength; i++) {
         console.log(result.phonesArray[i].device);
     }
    

    ?

    【讨论】:

    • 如果我控制台记录手机数组长度,它返回未定义,但如果我控制台记录phonesArray.device.length,它返回返回的第一行的字符数。比如它会返回 6,因为第一行是 iPhone,它包含 6 个字符
    • 那么,phonesArray 实际上并不是一个数组。您是否尝试过console.log(result) 来检查您从服务器获取的数据?
    【解决方案2】:

    我会首先检查数据库中的结果,也就是 $getPhoneResults,方法是:

    echo "<pre>"; var_dump($getPhoneResults); die();
    

    然后直接从浏览器调用 php-script。

    如果结果看起来正确,则在开始循环之前检查控制台以获取 AJAX 调用的整个结果:

    console.log(result);
    

    对于循环,您可以尝试使用 jQuery 来代替:

    $(result).each(function(i,e){
        //e.device
        //i will be your iterator
    });
    

    顺便说一句...通过添加:

    header("Content-type: application/json; charset=utf-8");
    

    在输出数据之前到你的 php-script,你的响应类型将是正确的,你不必这样做:

    $.parseJSON(results);
    

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      想通了,原来我需要在 PHP 中重新创建数组。像往常一样,如果我从数据库中检索一个关联数组并将其回显,它只会回显第一行,除非我通过循环运行它。

      数组正常工作,它只返回 1 个结果。我将我的 php 更改为

       $getPhoneResults = $db->query("SQL QUERY GOES HERE");
       $newDeviceArray = array();
       while ($row = mysqli_fetch_assoc($getPhoneResults)){
         $newDeviceArray[] = $row;
       };
       $url = $getSites['main_url'];
       $bounceRate = $getBounceRate['result'];
       $conversionRate = $getConversionRate['result'];
       $dataArray = array('url' => $url,'bounceRate' => $bounceRate, 'conversionRate' => $conversionRate);
       $results = array('dataArray' => $dataArray, 'phonesArray' => $newDeviceArray);
       echo json_encode($results, JSON_FORCE_OBJECT);
      

      现在当我跑步时

       console.log(result.phonesArray[0]);
      

      它正确返回行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-01
        • 1970-01-01
        • 2017-04-03
        • 1970-01-01
        • 2016-01-30
        • 2017-11-09
        • 2019-03-24
        • 2012-06-26
        相关资源
        最近更新 更多