从AJAX请求中返回while循环

时间:2017-01-19 10:55:41

标签: javascript php arrays ajax while-loop

我正在尝试从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,上面的命令将循环并将每个字母记录为单独的对象。

我认为我需要将每个返回的行保存为单独的数组对象,如device,device1,device2,device3,device4,因为它每次都保存在设备数组名称上,并且只返回1个结果。 / p>

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:0)

如果没有看到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);
 }

答案 1 :(得分:0)

我首先通过执行以下操作来检查数据库$getPhoneResults的结果:

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

然后直接从浏览器调用php脚本。

如果结果看起来是正确的,那么在开始循环之前检查控制台是否有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脚本,您的响应类型将是正确的,您不必这样做:

$.parseJSON(results);

希望它有所帮助。

答案 2 :(得分:0)

想出来,结果我需要在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]);

它正确返回行。