php - 困惑如何正确使用 jquery getJSON

标签 php jquery json

我正在尝试使用 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/

相关文章:

php - 如何在 PHP ElasticSearch API 中进行批量删除

php - 更新 MySQL 中的所有记录

javascript - jQuery:从另一个元素触发悬停事件

php - 循环并显示来自数据库sql的多个表行

php - 为什么 php 不将图像内容写入磁盘?

php - 使 foreach 循环中的 $id 唯一

javascript - 将值/变量从 fancybox iframe 传递到父级

javascript - 将 JSON HTTP POST 请求转换为 Java 对象时出错

arrays - NodeJS & Mongoose : Add element to existing empty array

javascript - 类型错误 : Cannot Read Property "x" from undefined. 仅当我包含值数组时