【问题标题】:jQuery AJAX form not posting resultsjQuery AJAX 表单不发布结果
【发布时间】:2014-01-21 08:21:30
【问题描述】:

我在使用 AJAX 从数据库返回结果时遇到问题。我尝试回显$diskspace$price,它们都返回未定义。

index.php

<form id="form" method="POST">
    Diskspace:
    <select id="Diskspace">
        <option value="0 AND 1">$0 - 1GB</option>
        <option value="1 AND 5">$1 - 5GB</option>
        <option value="5 AND 10">$5 - 10GB</option>     
    </select></br></br> 
    Price:
    <select id="Price">
        <option value="0 AND 5">$0 - $5</option>
        <option value="1 AND 5">$5 - $10</option>
        <option value="10 AND 20">$10 - $20</option>
        <option value="20 AND 40">$20 - $40</option>
        <option value="40 and 500">>$40</option>            
    </select></br></br> 
    <input type="submit" id="submit" value="enter">
</form> 
<div id="output"></div>

JS

$(document).ready(function(){

    $("div#output").hide();
    $("#submit").click(function(){
        $.post('join.php', {
            diskspace: $("#diskspace").val(),
            price: $("#price").val() 
        },
        function(data){
            $("div#output").html(data); 
            $("div#output").show();     
        }
        );
        return false;
    });     
});
</script>

join.php

<?php
if (isset($_POST['diskspace'])){
mysql_connect("localhost","root","") or die('Could not connect');
mysql_select_db("webhost") or die ('Could not find DB');

$diskspace = $_POST['diskspace'];
$price =$_POST['price'];

$query =  mysql_query("
    SELECT * FROM data WHERE Diskspace BETWEEN $diskspace
    AND Price BETWEEN $price 
");

$count = mysql_num_rows($query);

if ($count == 0){
        $output = "No such results, sorry.";
    }else{
        while($row = mysql_fetch_array($query)){
            $diskspace = $row['Diskspace'];
            $price = $row['Price'];
            $host = $row['Provider'];
            $output .= '<div>'.$host.'  '.$diskspace.'  '.$price.'</div>'; 
        }
}
echo $output;
}
?>

【问题讨论】:

    标签: php jquery mysql ajax database


    【解决方案1】:

    你没有给你的&lt;select&gt;s 名字:

    <select id="Diskspace" name="Diskspace">
                           ^^^^^^^^^^^^^^^^--- missing
    

    没有名称,没有为该字段提交表单。 id 不计算在内 - 它纯粹用于 DOM 操作,与表单提交无关。

    除此之外,您还容易受到SQL injection attacks 的攻击。

    【讨论】:

    • 关于SQL,这只是一个样机,我以后会加强。
    • 他是通过ajax传递元素值,并使用ID来获取值,所以不需要使用name属性。这是一个简单的 DOM 元素拼写错误的案例。
    • @David 为什么?它在本地服务器上,而不是在线。我只是在测试 AJAX 功能。避免MYSQL注入并不难,只是解决问题(例如我刚刚遇到的问题)更难。
    • @JackWilliams:因为这是习惯问题。即使在对事物进行原型设计时,您也希望保持良好的设计和编码实践。在实现一个功能时,你想到的第一个应该是正确的方法。即使它只是一个一次性的概念证明,不良代码也有通过不良编程习惯进入生产系统的历史。
    【解决方案2】:

    您的 HTML 元素的 id 为 Diskspace,而您正在寻找 diskspace 的元素。

    以以下为例:

    <select id="Diskspace">
        <option value="hello">hello</option>
    </select>
    
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script type="text/javascript">
    $(function(){
        console.log( $('#diskspace').val() );
    });
    </script>
    

    结果是未定义的,并且在新版本的jQuery中,如果找不到元素,它将不会通过ajax/post传递变量。

    这同样适用于您的 Price 元素。

    【讨论】:

    • 谢谢,全面的回答,犯了多么令人讨厌的错误。哈哈
    【解决方案3】:

    您的选择 ID 在您的 jquery 中不一样。改成这样:

     <form id="form" method="POST">
            Diskspace:
            <select id="diskspace">
                <option value="0 AND 1">$0 - 1GB</option>
                <option value="1 AND 5">$1 - 5GB</option>
                <option value="5 AND 10">$5 - 10GB</option>     
            </select></br></br> 
            Price:
            <select id="price">
                <option value="0 AND 5">$0 - $5</option>
                <option value="1 AND 5">$5 - $10</option>
                <option value="10 AND 20">$10 - $20</option>
                <option value="20 AND 40">$20 - $40</option>
                <option value="40 and 500">>$40</option>            
            </select></br></br> 
            <input type="submit" id="submit" value="enter">
        </form> 
        <div id="output"></div>
    

    【讨论】:

      【解决方案4】:

      替换:

      diskspace: $("#diskspace").val(),
      

      diskspace: $("#Diskspace").val(),
      

      【讨论】:

        猜你喜欢
        • 2013-07-20
        • 2016-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-28
        • 2010-10-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多