php - 无法调用.php文件进行第一次Ajax尝试。 (使用另一个下拉列表填充下拉列表)

时间:2015-05-25 16:02:35

标签: php html ajax

book包含:book_idbook_title
表格bookext包含:bookext_idbook_idbook的签名密钥),bookext_tag

这是我想要填充下拉列表的脚本。

<script>                            
                function get_bookextt() {
                    var request = $.ajax({
                        url: "getbookext.php",
                        type: "POST",           
                        dataType: "html"
                    });

                    request.done(function(msg) {
                        $("#get_bookext").html(msg);            
                    });

                    request.fail(function(jqXHR, textStatus) {
                        alert( "Request failed: " + textStatus );
                    });
                }

        </script>

看到该代码,这是我的第一个下拉列表的正文部分,它将关联必须出现的第二个下拉列表

<select id="book" name='book' onchange="get_bookextt();">
<option value=''>Select</option>
<?php while ($row = mysql_fetch_array($result)) {
    echo "<option value='" . $row['book_id'] . "'>" . $row['book_title'] . "</option>";}
?>
</select>
<div id="get_bookext"></div>

我真的觉得在这里发布我的整个getbookext.php文件是愚蠢的,因为我认为这是我搞砸的地方。

<?php
include 'db_connection.php';
if ($_POST) {
    $book_id = $_POST['book_id'];
    if ($book_id != '') {
       $sql1 = "SELECT * FROM bookext WHERE book_id=" . $book_id;
       $result1 = mysql_query($sql1);
       echo "<select name='bookext'>";
       echo "<option value=''>Select</option>"; 
       while ($row = mysql_fetch_array($result1)) {
          echo "<option value='" . $row['bookext_id'] . "'>" . $row['bookext_tag'] . "</option>";}
       echo "</select>";
    }
    else
    {
        echo  '';
    }
}

?>

请指出我哪里出错了。

- EDITED--
这是我的整个头部区域

include 'db_connection.php';

$sql = "SELECT * FROM book";
$result = mysql_query($sql);
?>
<script>                            
function get_bookextt() {
     var request = $.ajax({
                         url: "getbookext.php",
                         type: "POST",
                         data: {'book_id', $(this).val()},
                         dataType: "html"
                    });
     request.done(function(msg) {
          $("#get_bookext").html(msg);            
     });
     request.fail(function(jqXHR, textStatus) {
          alert( "Request failed: " + textStatus );
     });
}



        </script>

虽然这是整个身体区域

<select id="book" name='book' onchange="get_bookextt($(this).val());">
<option value=''>Select</option>
<?php while ($row = mysql_fetch_array($result)) {
    echo "<option value='" . $row['book_id'] . "'>" . $row['book_title'] . "</option>";}
?>
</select>
<div id="get_bookext"></div> // Sub will be appended here using ajax

PS1。我不明白为什么get_bookextt($(this).val());在我的记事本++中没有突出显示。

1 个答案:

答案 0 :(得分:1)

您的AJAX请求中没有book_id,PHP需要返回数据http://api.jquery.com/jquery.ajax/

所以你的JS函数应该像......

function get_bookextt(book_id) {
     var request = $.ajax({
                         url: "getbookext.php",
                         type: "POST",
                         data: {'book_id': book_id},
                         dataType: "html"
                    });
     request.done(function(msg) {
          $("#get_bookext").html(msg);            
     });
     request.fail(function(jqXHR, textStatus) {
          alert( "Request failed: " + textStatus );
     });
}

然后您的HTML应该在更改时发送值,因此将select替换为:

<select id="book" name='book' onchange="get_bookextt($(this).val());">

当我遇到AJAX请求问题时,我要做的第一件事就是在Chrome的开发者工具中查看请求。

  1. 确保请求进入PHP脚本
  2. 确保它发送我期待的数据
  3. 这是一篇关于使用这些工具的文章,它是用IE编写的,但Chrome非常相似。 http://forums.asp.net/t/1982579.aspx?Using+the+browser+s+dev+tools+to+diagnose+ajax+problems+and+other+things+

    您还应切换到PDO或mysqli,以便您使用预准备语句,因为不推荐使用mysql_。目前有两种限制注射可能性的方法。

    1. 将您的POST ID转换为int,因此必须是数字。
    2. 使用mysql_real_escape_string
    3. 选项1:

      $book_id = (int)$_POST['book_id'];
      

      选项2:

      $book_id = mysql_real_escape_string($_POST['book_id']);
      

      这是一个线程,当你切换如何防止这些。 How can I prevent SQL injection in PHP?

      <强>更新

      <!DOCTYPE html>
      <html>
      <head>
      <script type="text/javascript" src="//code.jquery.com/jquery-1.11.3.min.js"></script>
      </head>
      <body>
      <script type="text/javascript">
      function get_bookextt(book_id) {
           var request = $.ajax({
                               url: "getbookext.php",
                               type: "POST",
                               data: {'book_id': book_id},
                               dataType: "html"
                          });
           request.done(function(msg) {
                $("#get_bookext").html(msg);            
           });
           request.fail(function(jqXHR, textStatus) {
                alert( "Request failed: " + textStatus );
           });
      }
      </script>
      <select id="book" name='book' onchange="get_bookextt($(this).val());">
      <option value=''>Select</option>
          <option value='1'>test</option>
      </select>
      <div id="get_bookext"></div>
      </body>
      </html>