【问题标题】:Not Getting a POST value from ajax没有从 ajax 获取 POST 值
【发布时间】:2019-11-20 07:03:15
【问题描述】:

我的表单中有一个选择下拉菜单和一个文本字段。因此,每当我在下拉列表中选择一个值时,我都尝试使用 $.ajax,文本字段将根据下拉列表中的选定值显示输出。但我总是从 ff.php 得到一个错误的未定义变量。我试图确定原因,我发现我在 ff.php 中没有得到任何 POST 值。有什么解决方案吗?提前致谢。

这是我在 prs.php 中的代码

<script src="https://code.jquery.com/jquery-3.2.1.min.js" type="text/javascript"></script>
  <script>
  function getState(val) {
        $.ajax({
        type: "POST",
        url: "ff.php",
        data:'productid='+val,
        success: function(data){
            $("#brandss").val(data);
        }
        });
    }
  </script>

<td><select name="drpcode" onchange="getState(this.value)" class="form-control name_list"><?php $drp = mysqli_query($conn,"SELECT productcode FROM products"); while ($dp = mysqli_fetch_array($drp)) {
                      ?><option value="<?php echo $dp['productid']; ?>"><?php echo $dp['productcode']; ?></option><?php } ?></select></td>

<td><input type="text" id="brandss" name="brand" placeholder="Brand" class="form-control name_list" required  value=""></td>

这是我在 ff.php 中的代码

<?php
     require_once("conn.php");


     $id = $_POST['productid'];

         $query = mysqli_query($conn,"SELECT productbrand FROM products WHERE productid = '$id' ");

         while($rs = mysqli_fetch_array($query,MYSQLI_BOTH)) {
         $brand = $rs['productbrand'];

 }
 echo $brand;
?>

【问题讨论】:

  • 您的 ajax 请求有响应吗?它工作正常吗?另外,你能用var_dump($brand);检查变量$brand吗?
  • 你应该删除 ff.php 中的 echo $id
  • 您的代码易受 SQL 注入攻击。您应该使用准备好的语句。

标签: php jquery html mysql ajax


【解决方案1】:

请添加json格式的数据,并在ajax函数中指定数据类型为json

$.ajax({
        url: "ff.php",
        type: "POST",
        data:  {
                productid : val
                // more fields can be added here
        },
        dataType: 'json',
        success: function(return){              
            // process success 
        },
        error: function(err) {
            // Process failure
        }           
});

【讨论】:

  • 这有什么帮助? data 作为纯字符串完全有效,dataType 指的是服务器返回的数据,所以不会影响 OPs 问题。
【解决方案2】:

我认为ajax数据属性的格式是错误的。你应该试试这个: data:{productid:val}

更新:

您应该在 select 语句中同时选择 productid 和 product code

<td>
<select name="drpcode" onchange="getState(this.value)" class="form-control 
name_list">
<?php $drp = mysqli_query($conn,"SELECT productid,productcode FROM 
 products"); 
 while ($dp = mysqli_fetch_array($drp)) {
    ?><option value="<?php echo $dp['productid']; ?>"><?php echo 
  $dp['productcode']; ?></option><?php } ?>
</select>
</td>

 function getState(val) {
    $.ajax({
    type: "POST",
    url: "ff.php",
    data:{productid:val},
    success: function(data){
        $("#brandss").val(data);
    }
    });
}

【讨论】:

  • 你只在你的 sql 语句中选择 productcode : $drp = mysqli_query($conn,"SELECT productcode FROM products") -- 你没有选择 productid
【解决方案3】:

尝试在select 之前运行查询,然后用循环显示结果-

<?php $drp = mysqli_query($conn,"SELECT productcode FROM products"); ?>

<select name="drpcode" onchange="getState(this.value)" class="form-control name_list"> 
<?php while ($dp = mysqli_fetch_array($drp)) { ?>
    <option value="<?php echo $dp['productid']; ?>"><?php echo $dp['productcode']; ?> 
    </option><?php } ?>
</select>

【讨论】:

    猜你喜欢
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 2013-11-01
    相关资源
    最近更新 更多