我正在尝试使用 jquery getJSON 从 php 文件获取表的信息,但它不起作用。有人可以给我一些关于我哪里出错的指示吗:
Javascript:
$(document).ready(function(){
$("input#autofill").click(function()
{
$.get("last_year_ISBN.php",
function(data){
var isbns = $.parseJSON(data); //creates a javascript object.
$.each(isbns, function(){
var elements = document.getElementById("booklist").getElementsByTagName("input");
for (var i=0, i<elements.length; i++)
{
elements[i] = this;
}
});
},
"json");
});
});
HTML/PHP
<?php
$file = fopen("SGS_Fall_Booklist.csv", "r");
$entry= fgetcsv($file);
echo $entry[0] . $_GET["program"] . $entry[1] . $GET["school"] . $entry[2] . $GET["term"] . "<br>";
//COMMENTED OUT FOR TESTINGecho "<input type='submit' name='checkall' value='AutoFill (last years ISBN's)'></input><br>";
//if ($entry[0] == $_GET["program"] && $entry[1] ==$GET["school"] && $entry[2] == $GET["term"])
//{
echo "<table id='booklist'><tr>
<th>Edit</th>
<th class='coursename'>" . $entry[6] . "</th>
<th class='startdate'>" . $entry[7] . "</th>
<th class='booktitle'>" . $entry[17]. "</th>
<th class='author'>" . $entry[18]. "</th>
<th class='isbn'>" . $entry[16]. "</th>
</tr>";
while(! feof($file))
{
$entry = fgetcsv($file);
echo "<tr>
<td><input type='checkbox'></input></td>
<td class='coursename'>" . $entry[6] . "</td>
<td class='startdate'>" . $entry[7] . "</td>
<td class='booktitle'>" . $entry[17]. "</td>
<td class='author'>" . $entry[18]. "</td>
<td class='isbn'><input class='ISBN_number' type='text' value='";
if(isset($_GET["checkall"]))
{
echo $entry[16];
}
echo "'size='13' maxlength='13'></input></td>
</tr>";
}
//}
echo "</table>";
fclose($file);
?>
外部php文件
<?php
$file = fopen("SGS_Fall_Booklist.csv", "r");
$entry = fgetcsv($file); //discard the first title line
$i=0;
while(! feof($file))
{
$entry = fgetcsv($file);
$isbns=[$i] = $entry;
$i++;
}
fclose($file);
echo json_encode($isbns);
?>
<小时/>
我已经按照 hyperslug 的建议更改了我的代码,但它仍然不起作用。 Alert(data) 确实返回整个 json 语句。我错过了什么?
$(document).ready(function(){
$("input#autofill").click(function()
{
$.get("last_year_ISBN.php",
function(data){
alert(data);
var isbns = $.parseJSON(data); //creates a javascript object.
var elements = $('#booklist .ISBN_number');
$.each(isbns, function(index, obj){
//var elements = document.getElementById("booklist").getElementsByTagName("input");
//for (var i=0, i<elements.length; i++)
//{
//elements[i].value = this;
//}
$(elements[index]).val(obj);
});
},
"json");
});
});
<小时/>
我终于找到我的问题了!我在 php 端使用 json_encode ,它将请求作为 json 发送回来。 .get 调用以 AS JSON 格式读取它(注意最后一个参数)并自动将其转换为 JavaScript 对象。因此,我的 parseJSON 行当然不起作用,我正在解析 javascript 对象,而不是 json 文本!!
最佳答案
你的 jQuery .each
循环为您提供了 isbns
中每个对象的索引和引用。 。如果isbns
是一个简单数组,其元素数量与 booklist
完全相同。有行,
var elements = $('#booklist .ISBN_number');
$.each(isbns, function(index, obj){
$(elements[index]).val(obj);
});
应填写您的 ISBN <input>
字段。
如果isbns
实际上是一个对象数组,您必须按名称引用该值:
$(elements[index]).val(obj.ISBN);
关于php - 困惑如何正确使用 jquery getJSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7959646/