我有一个php函数来生成一个数字列表,还有一个ajax调用来检索那个数字数组。我可以提醒列表并且它工作正常,但是当我尝试将其打印到HTML表格中时,我收到错误"未捕获的类型错误:无法使用'在'运营商搜索'长度'在Infinity" 任何帮助将不胜感激。
<!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 :(得分:1)
实际错误意味着$ .each可能是错误的数据类型。例如。一个字符串,当in应该传递一个它可以迭代的对象。在您的情况下,javascript和PHP代码都有一些错误。您的PHP代码只是回显了素数。所以你ajax函数得到了一个串联的数字串(你的Uncaught TypeError的原因)。您必须将数字推送到数组,将其转换为json字符串并返回该结果,以便您可以在任何需要的地方回显它。
仅关于你的ajax功能。在变量声明中松散$ .each()。 所以:
var d = $.each(JSON.parse(data));
变为:
var d = JSON.parse(data);
更新添加了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