使用jQuery.ajax发送多个数据

时间:2016-02-21 02:44:20

标签: php jquery ajax

我正在尝试使用jQuery.ajax发送多个数据。组合框product1和文本框price正在运行。但是当我尝试发送quantity的文字时出错了。

的index.php

<?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);
} 

$sql = "SELECT * FROM forms";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
     echo "<select class='form-control select2' id='product1' onChange='getPrice(this.value)' name='product1' style='width: 100%;'>";
     echo "<option selected disabled hidden value=''></option>";
     // output data of each row
     while($row = $result->fetch_assoc()) {
                      echo "<option value='" . $row["id"]. "'>" . $row["naam"]. "</option>";
     }                   
echo "</select>";
} else {
     echo "0 results";
}

$conn->close();

?>
<html>
<body>
<!-- Your text input -->
<input id="quantity" type="text" placeholder="quantity">

<!-- Your text input -->
<input id="product_name" type="text" placeholder="product_name">

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
function getPrice() {

    // getting the selected id in combo
    var selectedItem = jQuery('#product1 option:selected').val();

    // Do an Ajax request to retrieve the product price
jQuery.ajax({
    url: 'get.php',
    method: 'POST',
data: 'id=' + selectedItem + ', quantity:document.getElementById('quantity').value,
    success: function(response){
        // and put the price in text field
        jQuery('#product_name').val(response);
        jQuery('#quantity').html(response);        },
    error: function (request, status, error) {
        alert(request.responseText);
    },
}); 
}
</script>
</body>
</html>

get.php

<?php

// Turn off all error reporting
error_reporting(0);

?>
<?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 
    {
    $product1 = filter_input(INPUT_POST, 'id', FILTER_SANITIZE_NUMBER_INT) ;
    $quantity = filter_input(INPUT_POST, 'html', FILTER_SANITIZE_NUMBER_INT) ;

    $query = 'SELECT price * ' . $quantity . ' FROM forms WHERE id=' . $product1 . ' ';

    $res = mysqli_query($conn, $query) ;
if (mysqli_num_rows($res) > 0) 
{
    $result = mysqli_fetch_assoc($res) ;
    echo $result['price'];
}else{
    echo "0 results";
}

    }

?>

有人可以帮我这个吗?

4 个答案:

答案 0 :(得分:1)

在index.php中尝试这个:

data: {'id': selectedItem, 'quantity' : jQuery('#quantity').val()},

并修改get.php。

$product1 = isset($_POST['id'])?$_POST['id']:'';
$quantity = isset($_POST['quantity'])?$_POST['quantity']:'';
$query = 'SELECT price * ' . $quantity . ' AS price FROM forms WHERE id=' . $product1 . ' ';

答案 1 :(得分:0)

<input id="quantity" type="text" placeholder="quantity" value="<?php echo $quantity; ?>">
<input id="product_name" type="text" placeholder="product_name" value="<?php echo $product_name; ?>"> 

在get.php中,通过将其回显到输入中来设置其值。

使用

将数据写入index.php中的div
$("#yourdiv").html(response);

答案 2 :(得分:0)

在没有任何错误消息的情况下很难分辨出那里发生了什么,我不确定我是否完全理解你要完成的任务。

当你在这里取消评论最后一行时,你在谈论它不起作用吗?

success: function(response){
    // and put the price in text field
    jQuery('#product_name').val(response);
    // jQuery('#quantity').val(response);
}

该行表示使用从PHP返回的所有数据填充数量字段。是否要在product_name字段和数量字段中存储相同的值(响应)?如果要将数量发送到PHP脚本,则需要在DATA部分中包含它的值:

data: 'id=' + selectedItem + ', qty=' + $('#quantity').val(),

我建议发送一个包含所需值的JSON对象,然后将这些值放入相应的字段中。

$array["qty"] = $row[i]["qty"];
$array["cost"] = $row[i]["cost"];

echo json_encode($array);

当您从PHP获取数据时,您可以执行以下操作...

resultInfo = JSON.stringify(response);
jQuery('#product_cost').val(resultInfo["cost"]);
jQuery('#quantity').val(resultInfo["qty"]);

在PHP中,确保它将数字作为数字读取,因此SQL不会尝试乘以(cost *'2')而不是(cost * 2)。

$qty = (int)$_POST("qty"); //capture it as an integer

根据您需要的安全性,值得一提的是,您可能需要考虑清理输入。我建议将PDO用于准备好的声明。

我希望这里有些东西可以帮助你。

答案 3 :(得分:0)

将代码稍微修改为

data:{ 
   id:selectedItem, 
   quantity:document.getElementById('quantity').value 
},