【发布时间】:2011-10-31 20:56:48
【问题描述】:
我正在尝试使用 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 文本!!
【问题讨论】:
-
您能否更清楚地解释一下您要使用 javascript 实现的目标。
-
这里是您必须学习如何使用 Chrome/Firefox 调试器的地方。而不是
alert使用console.log。在var elements = $('#booklist .ISBN_number');之后放置console.log(elements)和console.log(isbns)之类的行。这会将值输出到控制台,在 Chrome 中为CTRL-SHIFT-J,在 Firefox/Firebug 中为CTRL-F12。