2017-01-19 3 views
1

AJAX 요청에서 while 루프를 반환하고 다른 데이터를 반환하려고합니다.AJAX 요청에서 while 루프 반환

기본적으로 현재 PHP 요청에서 3 또는 4 세트의 데이터를 반환하고이를 반환 할 때 내 응용 프로그램에 전달합니다. 하지만 테이블에 인쇄 할 데이터 집합 중 하나를 반복 할 수 있어야합니다.

내 코드가 모두 작동하지만 오류가 발생하지 않고 장치 배열이 올바르게 반환되지 않습니다.

나는 아주 가깝고, 내 문제가 뭔지 알 것 같아. 나는 그 순간 어떻게 해결할 수 있을지 생각하지 않는다.

자바 스크립트

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 
}; 

그것은 단지 데이터베이스의 첫 행을 반환 내가

console.log(result.phonesArray.device); 

을 실행하면 순간 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); 
?> 

,하지만 난 경우 thi와 같은 for 루프에서 실행하십시오. s

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

첫 번째 행의 단일 문자를 반환합니다. 예를 들어 첫 번째 행은 iPhone이고 위의 명령은 각 문자를 반복하여 개별 객체로 기록합니다.

device, device1, device2, device3, device4와 같은 별도의 배열 객체로 반환 된 각 행을 저장해야 할 필요가 있다고 생각합니다. 매번 장치 배열 이름을 저장하고 결과를 1 회만 반환하기 때문입니다.

도움이 될 것입니다.

답변

0

PHP로 배열을 다시 만들어야한다는 것을 알았습니다. 평소와 같이 데이터베이스에서 연관 배열을 검색하여 echo'd하면, 루프를 통해 실행하지 않는 한 첫 번째 행만 표시됩니다.

어레이가 작동 중이므로 단순히 1 개의 결과 만 반환했습니다. 나는

$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); 

내 PHP를 변경하고 지금은

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

그것은 올바르게 행을 반환 실행할 때.

0

그것은 당신의 phoneArray 변수에 실제로 무엇을 보지 않고 말을하기 어렵다, 그러나 당신이하고있는 것을 조금 의심스러운하십시오에서 결과 집합을

var arrayLength = result.phonesArray.device.length; 

(가정 이름을 기반으로하고 있다는

var arrayLength = result.phonesArray.length; 

그리고 당신은 같은 멤버에 액세스 할 것 : 당신이 프로세스에 노력하고 배열이 phonesArray입니다 데이터베이스 쿼리)이 안

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

?

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

을 그리고 브라우저에서 직접 PHP 스크립트를 호출

+0

콘솔의 로그 폰 배열 길이는 정의되지 않은 값을 반환하지만 콘솔에서 phonesArray.device.length를 로그하는 경우 반환되는 첫 번째 행의 문자 수를 반환합니다. 예를 들어, 첫 번째 행은 6 문자를 포함하는 iPhone이기 때문에 6을 반환합니다. –

+0

따라서 phonesArray는 실제로 배열이 아닙니다. 서버에서 얻은 데이터를 검사하기 위해'console.log (result)'를 시도 했습니까? – megaflop

0

내가 좋아하는 뭔가를 수행하여 $getPhoneResults 일명 데이터베이스에서 결과를 확인하여 시작합니다.

결과가 올바른 보인다면 당신은 그 위에 루프를 시작하기 전에, 다음 AJAX 호출의 전체 결과의 콘솔을 확인하십시오

루프를 들어
console.log(result); 

, 당신은 대신에 jQuery를 함께이 일을 시도 할 수 :

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

당신의 PHP 스크립트의 BEF 사람 : 추가하여

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

... 데이터를 출력하는 경우 응답 유형이 정확하며이 작업을 수행하지 않아도됩니다.

$.parseJSON(results); 

희망이 있습니다.