2017-02-23 20 views
0

У меня есть функция php для генерации списка чисел и вызов ajax для извлечения этого массива чисел. Я могу предупредить список, и он отлично работает, однако, когда я пытаюсь распечатать его в HTML-таблице, я получаю сообщение об ошибке «Uncaught TypeError: не может использовать« in »для поиска« длины »в Infinity» Любая помощь будет оценена ,Ошибка печати данных Ajax в таблице html

<!DOCTYPE html> 
<html> 
<head> 
<script  src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
</head> 
<body> 
<script> 
$.ajax({ 
type: "POST", 
url: "primeNumbers.php", 
datatype: 'JSON', 
success: function(data){ 
    var d = $.each(JSON.parse(data)); 
    var output; 
    $.each(d,function(i,e){ 
     output += '<tr><td>'+e.data+'</tr></td>'; 
     }); 

    $('#table').append(output); 

    alert(data); 
} 
}); 
</script> 
<h1>Heading</h1> 
<table id="table"> 
    <tr> 
    <td>Name</td> 
    </tr> 
</table> 

</body> 
</html> 

primeNumbers.php

<?php 
function prima($n){ 

    for($i=1;$i<=$n;$i++){ 

      $counter = 0; 
      for($j=1;$j<=$i;$j++){ 


       if($i % $j==0){ 

         $counter++; 
       } 
      } 


     if($counter==2){ 

       echo json_encode($i); 
     } 

    } 
} 
prima(100); 

?> 
+0

Вы посмотрели выходные данные своего php-скрипта? Он просто выводит очень большое количество. Вы должны поместить простые числа в массив в php-скрипте, а затем вывести json-версию этого массива. – NineBerry

+0

Btw: это ужасно неэффективный способ вычисления простых чисел – NineBerry

ответ

1

Фактическая ошибка означает, что $ .each забегаем неверный тип данных. Например. строка, в которой должен быть передан объект, который он может перебирать. В вашем случае, как javascript, так и PHP-код имеют некоторые ошибки. Ваш PHP-код просто повторил простое число. Таким образом, функция ajax вернула конкатенированную строку чисел (причина вашего Uncaught TypeError). Вы должны подтолкнуть числа к массиву, преобразовать это в строку json и вернуть этот результат, чтобы вы могли эхом отбирать его в любом месте.

Относительно только вашей функции ajax. Loose $ .each() в объявлении переменной. Итак:

var d = $.each(JSON.parse(data)); 

становится:

var d = JSON.parse(data); 

UPDATE добавил PHP исправить

Вот неподвижная/переработан функции PHP.

function prima($n){ 

    $res = []; // Initiate result array 

    for($i=1;$i<=$n;$i++){ 

     $counter = 0; 
     for($j=1;$j<=$i;$j++){ 


      if($i % $j==0){ 

        $counter++; 
      } 
     } 


    if($counter==2){ 
     $res[] = $i; // store value to array 
    } 

    } 

    return json_encode($res); // return converted json object 

} 

header('Content-Type: application/json'); // tell browser what to expect 
echo prima(100); // echo the json string returned from function 
+0

Да, я пробовал так. Я просто не могу пройти мимо ошибки – user2168066

+0

@ user2168066 обновил ответ, включив фиксированную функцию – Yolo

 Смежные вопросы

  • Нет связанных вопросов^_^