如何获取特定的 PHP 变量以通过 AJAX 调用发送?

Posted

技术标签:

【中文标题】如何获取特定的 PHP 变量以通过 AJAX 调用发送?【英文标题】:How to get a specific PHP variable to send with an AJAX call? 【发布时间】:2017-07-24 15:31:41 【问题描述】:

我有一个简单的 php/mysql 应用程序,它可以像这样从数据库中查询一堆员工信息(只有 5 列:employee_id、first_name、last_name、x_coord、y_coord)......

$sql = "SELECT * FROM employees";
        $getemployees = mysqli_query($connection, $sql);
        if (!$getemployees) 
        die("Database query failed: " . mysqli_error($connection));
         else 
        while ($row = mysqli_fetch_array($getemployees)) 
            $output.="<div class='employee' style='top: " . $row['x_coord'] . "px; left: " . $row['y_coord']. "px;'>". $row['first_name'] . " " . $row['last_name'] . "</div>";
        
        

我还有这段代码可以使名称可拖动,并在释放可拖动项目后使用新的顶部/左侧位置更新我的数据库...

 <script>
  $( function() 

    $('.employee').draggable(
        stop: function(event, ui) 
            var left = $(this).position().left;
            var top = $(this).position().top;
            alert(left + " " + top);   //just for testing

           //Make ajax call here:
            $.ajax(
                  url: 'update-db.php',
                  type: 'POST',
                  data: leftPosition: left, topPosition: top ,   
                  success: function()  console.log('OK'); ,
                  error: function()  console.log('Fail!'); 
             );
        
    ).resizable(
        stop:function(event,ui)
    )
   );


  </script>

这一切都很好,但我现在意识到我还需要传递“employee_id”,以便正确更新数据库。那么如何将employee_id 传递给AJAX(连同top 和left 变量)?

显然,当我在这篇文章顶部的代码的第一个 sn-p 中查询 db 时,我需要将employee_id(即$row['employee_id'])“放置”到某处,以便所有可拖动的div也有相应的employee_id 信息。然后需要将“employee_id”(仅属于我刚刚拖动的项目)放入 AJAX 调用的“数据”区域。

最好的方法是什么?我显然对如何通过 AJAX 调用仅获取特定的employee_id 感到困惑。任何帮助/指导将不胜感激。

【问题讨论】:

【参考方案1】:

您可以将其添加到数据中。

$.ajax(
              url: 'update-db.php',
              type: 'POST',
              data: leftPosition: left, topPosition: top,   employeeid:employeeid ,   
              success: function()  console.log('OK'); ,
              error: function()  console.log('Fail!'); 
         );

然后应在脚本中的某处填充employeeid 变量(基于您访问特定行的位置)。您可以考虑为拖动的元素使用属性,然后使用 $(this).attr()

【讨论】:

【参考方案2】:

您可以使用 .employee 类中的隐藏输入字段来执行此操作。

&lt;input type="hidden" class="employee_id" value="&lt;?php echo $row['employee_id'];?&gt;" name="id" /&gt;

现在,您可以像下面这样轻松地从 ajax 中获取此 ID。

$('.employee').draggable(
    var id=$(this).find("input.employee_id").val();
    ....

所以,你的最终代码如下,

 $sql = "SELECT * FROM employees";
            $getemployees = mysqli_query($connection, $sql);
            if (!$getemployees) 
            die("Database query failed: " . mysqli_error($connection));
             else 
                while ($row = mysqli_fetch_array($getemployees)) 
                    $output.="<div class='employee' style='top: " . $row['x_coord'] . "px; left: " . $row['y_coord']. "px;'>";
                    $output.="<input type='hidden' class='employee_id' value='" . $row['employee_id'] . "' />";    //Hidden input field is added containing employee Id.
                    $output.= $row['first_name'] . " " . $row['last_name'];
                    $output.="</div>";
                
            

Ajax 代码会,

<script>
  $( function() 

    $('.employee').draggable(

        var id=$(this).find('input.employee_id').val();   // this grabs the id of employee

        stop: function(event, ui) 
            var left = $(this).position().left;
            var top = $(this).position().top;
            alert(left + " " + top);   //just for testing

           //Make ajax call here:
            $.ajax(
                  url: 'update-db.php',
                  type: 'POST',
                  data: leftPosition: left, topPosition: top, employee_id: id ,   // passed id parameter to php script along with others.
                  success: function()  console.log('OK'); ,
                  error: function()  console.log('Fail!'); 
             );
        
    ).resizable(
        stop:function(event,ui)
    )
   );


  </script>

【讨论】:

【参考方案3】:

我不知道您如何称呼数据库中包含员工 ID 的列,但我假设此答案称为 employee_id。现在更新您的 PHP 代码,以便将员工 ID 传输到 DOM 并使用 javascript 访问它:

while ($row = mysqli_fetch_array($getemployees)) 
            $output.="<div class='employee' data-id='".$row['employee_id']."' style='top: " . $row['x_coord'] . "px; left: " . $row['y_coord']. "px;'>". $row['first_name'] . " " . $row['last_name'] . "</div>";
        

现在可以通过类为employee 的div 的data-id 属性访问员工ID。 您现在可以从 JavaScript 访问它:

// ...
data: leftPosition: left, topPosition: top, employeeId: $(".employee").data("id") 
// ...

【讨论】:

【参考方案4】:

如果您需要发送 id 列表,您可以使用以下内容。我假设员工 ID 列表是一个数组对象。

var jsonids = JSON.stringify(employee_ids);
$.ajax(
          url: 'update-db.php',
          type: 'POST',
          data: leftPosition: left, topPosition: top, employeeids:  jsonids,   
          success: function()  console.log('OK'); ,
          error: function()  console.log('Fail!'); 
);

【讨论】:

以上是关于如何获取特定的 PHP 变量以通过 AJAX 调用发送?的主要内容,如果未能解决你的问题,请参考以下文章

js获取到的值如何用ajax传到php中

如何通过 SQL Query 获取 PHP 变量的值?

从 PHP foreach 循环中获取 Ajax 变量(第二部分)

通过 AJAX 获取在您的服务器上调用 PHP 文件的域

如何将带有上下文变量的 Django 模板发送到 Ajax 调用?

如何使用 jquery ajax 调用来调用 php 函数? [复制]