我正在尝试使用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);
&GT;
外部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);
?>
我已经将我的代码更改为超级插件建议但它仍然无法正常工作。 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文本!!
答案 0 :(得分:1)
您的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);
答案 1 :(得分:1)
我不知道这是否是唯一的问题,但我可以看到以下代码存在两个问题,根据我在代码中添加的注释和下面的解释:
$.get("last_year_ISBN.php",
function(data){
alert(data); // <--- NEW DEBUGGING ALERT HERE
var isbns = $.parseJSON(data); //creates a javascript object.
$.each(isbns, function(){
var elements = document.getElementById("booklist").getElementsByTagName("input");
// PROBLEM: you're setting all input elements to the current item
// from the $.each
for (var i=0, i<elements.length; i++)
{
elements[i] = this; // <--- SHOULD BE elements[i].value = this
}
});
},
"json"
);
我假设您的目的是更新HTML输入以显示JSON中的数据。要做到这一点,您需要说elements[i].value = this
,或者使用jQuery,$(elements[i]).val(this)
。
您的$.each
循环会迭代JSON中的所有项目,但是对于每个项目,您都会运行相同的for
循环并更新所有输入书目单“到当前项目。
我建议您首先输入调试console.log(data)
或alert(data)
语句,以确认您的回调实际上已被调用,以及它正在接收哪些数据。 (我在上面补充说。)
然后要解决问题(2),您需要将个别输入分配给JSON中的相应值,但如果没有看到JSON的结构,我无法真正建议如何做到这一点。
编辑:刚看到hyperslug的答案 - 这就是我在谈论问题(2)。假设您的JSON是一个简单的数组,其元素与您的输入一一对应,应该可以正常工作。如果您的JSON更复杂,请更新您的问题以显示其格式。答案 2 :(得分:0)
选择器$("input#autofill")
可能什么都不返回。
没有ID属性'autofill'的输入
答案 3 :(得分:0)
我认为错误就在这里:
$isbns=[$i] = $entry;
应该是:
$isbns[$i] = $entry;
答案 4 :(得分:0)
您的PHP可以使用一些改进:
$isbns = array();
while ($line = fgetcsv($file)) {
$isbns[] = $line;
}
echo json_encode($isbns);
但是,为什么使用AJAX调用来填充html表单,使用与首先生成表单的PHP脚本相同的源数据?