第二个功能忘记了所选的值

时间:2016-02-28 00:54:31

标签: javascript php jquery mysql ajax

我正在尝试使用ajax函数从数据库中获取数据。但是代码的某些部分不起作用。 $ car_id,witch是下拉列表中的选定值,在函数的第二部分中被遗忘。

首先。我有一个用户可以选择汽车的下拉列表:

<select name="car_id" id="car_id" onChange="getCar(this.value)">
    <option value="0">Select</option>
    <option value="1">Volvo XC90</option>
    <option value="2">Saab 95</option>
    <option value="3">Mercedes SLK</option>
    <option value="4">Audi TT</option>
</select>

选择(onChange事件)后,我的脚本运行以下功能:

<script> 
function getCar(selectedItem) {
    jQuery.ajax({ 
        url: 'get1.php', 
        method: 'POST', 
        data: {'car_id' : jQuery('#car_id').val()},
        success: function(response){ 
            jQuery('#car_id').val(response); 
            jQuery('#car_brand').val(response);
            getCar2()
            }, 
        error: function (request, status, error) { 
            alert(request.responseText); 
            }, 
        }); 
    } 
</script>

此函数运行以下SQL查询: SELECT car_brand FROM cars WHERE car_id = $car_id

该函数从数据库中获取car_brand并将其发布到#car_brand文本字段中。这部分代码工作正常。但正如您所看到的,该函数调用第二个函数:

<script> 
function getCar2(selectedItem) {
    jQuery.ajax({ 
        url: 'get2.php', 
        method: 'POST', 
        data: {'car_id' : jQuery('#car_id').val()},
        success: function(response){ 
            jQuery('#car_id').val(response); 
            jQuery('#car_model').val(response);
            }, 
        error: function (request, status, error) { 
            alert(request.responseText); 
            }, 
        }); 
    } 
</script>

这次函数尝试获取car_model。该函数需要将其发布到#car_model文本字段中。但这不起作用。当我查看firebug控制台时,我发现第二个函数getCar2忘记了$ car_id。

当我选择值3时,第一个函数运行SQL语句: SELECT car_brand FROM cars WHERE car_id = 3 和第二个功能: SELECT car_model FROM cars WHERE car_id =

我该如何解决这个问题?

更新1:

<?php    

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "database";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname) ;
// Check connection
if ($conn->connect_error) {
    die('Connection failed: ' . $conn->connect_error) ;
}else {
    $car_id = isset($_POST['car_id'])?$_POST['car_id']:'';
    $car_brand = isset($_POST['car_brand'])?$_POST['car_brand']:'';

    $query = 'SELECT * FROM cars WHERE car_id="' . mysqli_real_escape_string($conn, $car_id) . '"';    
    $res = mysqli_query($conn, $query) ;
  if (mysqli_num_rows($res) > 0) {
     $result = mysqli_fetch_assoc($res) ;
    echo $result['car_brand'];   
  }else{
     $result = mysqli_fetch_assoc($res) ;
    echo "";  
  }    
} 

?>

2 个答案:

答案 0 :(得分:1)

从getCar中删除jQuery('#car_id').val(response);。无需更新它,因为它已经具有car_id

<script> 
    function getCar(selectedItem) {
        jQuery.ajax({ 
            url: 'get1.php', 
            method: 'POST', 
            data: {'car_id' : jQuery('#car_id').val()},
            success: function(response){ 

                jQuery('#car_brand').val(response);
                getCar2()
                }, 
            error: function (request, status, error) { 
                alert(request.responseText); 
                }, 
            }); 
        } 
    </script>

答案 1 :(得分:1)

首先,您要将#car_id重新分配给函数getCar()中的新值,并使用以下行:jQuery('#car_id').val(response);

您在第一个函数ajax回调中为两个dom元素分配了相同的值response。我不知道这是不是你打算做什么。您正在通过getCar()变量向select函数传递selectedItem元素的实际值。如果确实需要重新分配#car_id的值,则应将selectedItem变量传递给getCar2函数,该函数应该仍然包含最初选择的值,并将其用于getCar2函数。

否则,从jQuery('#car_id').val(response);函数中删除行getCar,您也可以删除将变量传递给这两个函数,因为您没有在其他地方使用它们。