javascript - 通过 AJAX 发送变量后无法获取 $_POST 值

标签 javascript php sql-server ajax drop-down-menu

我有一个 HTML 表格,允许用户编辑/保存表格中的任何行。 <td>之一在表行中只包含一个下拉列表,没有像所有其他列那样的实际文本。每当我点击保存时,我的 AJAX 请求都会将所有数据发送到 update.php很好,除了 <td>与下拉菜单。当我在我的 AJAX 成功函数中获取下拉列表的值时,如果我检查我的 PHP 错误日志,它说保存下拉列表值的变量 checkered , 未定义。

如何修复我的代码,使其也能读取我的 checkered 中的内容变量并通过我的 AJAX 请求发送它。

JavaScript(函数开始后的前两行是获取下拉选择值的内容):

$(document).on("click", "#table .edit", function () {

  var $row = $(this).parents('tr');
  var checkered = $row.find($(".selected")).val();

  var $this = $(this);

  $this.closest('tr').find('select').attr("disabled", false);  

  var tds = $this.closest('tr').find('td').filter(function () {
    return $(this).find('.edit').length === 0;
  });
  if ($this.val() === 'Edit') {
    $this.val('Save');

    tds.not('.dropdown-select').prop('contenteditable', true);

  } else {
    var isValid = true;
    var errors = '';
    var elements = tds;
    var dict = {};
    elements.each(function (index, element) {
      var type = $(this).attr('class');
      var value = (element.tagName == 'INPUT') ? $(this).val() : $(this).text();

      // ----- Switch statement that provides validation for each table cell -----
      switch (type) {
        case "species":
          if (value) {
              dict["Species"] = value;
              break;
          }
          else {
            isValid = false;
            errors += "Please enter a valid Species\n";
          }
          break;
        case "container":
          if (value) {
              dict["Container"] = value;
              break;
          }
          else {
            isValid = false;
            errors += "Please enter Yes or No\n";
          }
          break;
        case "supp-name":
          if (value) {
              dict["Supplier-Name"] = value;
            break;
          }
          else {
            isValid = false;
            errors += "Please enter a valid Supplier Name\n";
          }
          break;
        case "supp-sku":
          if (value) {
              dict["Supplier-SKU"] = value;
              break;
          }
          else {
            isValid = false;
            errors += "Please enter a valid Supplier SKU\n";
          }
          break;
        case "newsku":
          if (value) {
              dict["Current-SKU"] = value;
            break;
          }
          else {
            isValid = false;
            errors += "Please enter a valid Current SKU\n";
          }
          break;
        case "mill":
          if (value) {
              dict["Mill"] = value;
              break;
          }
          else {
            isValid = false;
            errors += "Please enter a valid Mill\n";
          }
          break;
        case "lead-time":
          if (value) {
              dict["Lead-Time"] = value;
              break;
          }
          else {
            isValid = false;
            errors += "Please enter a valid Lead Time\n";
          }
          break;
        case "less-than-unit-cost":
          if (value) {
              dict["Less-Than-Unit-Cost"] = value;
              break;
          }
          else {
            isValid = false;
            errors += "Please enter a valid Less Than Unit Cost\n";
          }
          break;
        case "unit-cost":
          if (value) {
              dict["Unit-Cost"] = value;
              break;
          }
          else {
            isValid = false;
            errors += "Please enter a valid Unit Cost\n";
          }
          break;
        case "mill-direct-cost":
          if (value) {
              dict["Mill-Direct-Cost"] = value;
            break;
          }
          else {
            isValid = false;
            errors += "Please enter a valid Mill Direct Cost\n";
          }
          break;
        case "unit-quantity":
          if (value) {
              dict["Unit-Quantity"] = value;
            break;
          }
          else {
            isValid = false;
            errors += "Please enter a valid Unit Quantity\n";
          }
          break;
        case "bundle-cost":
          if (value) {
              dict["Bundle-Cost"] = value;
              break;
          }
          else {
            isValid = false;
            errors += "Please enter a valid number\n";
          }
          break;
        case "mixed-unit-price":
          if (value) {
              dict["6+-Mixed-Unit-Price"] = value;
            break;
          }
          else {
            isValid = false;
            errors += "Please enter a valid number\n";
          }
          break;
        case "uom":
          if (value) {
              dict["UOM"] = value;
              break;
          }
          else {
            isValid = false;
            errors += "Please enter a valid UOM\n";
          }
          break;
        case "mill-loc":
          if (value) {
              dict["Mill-Location"] = value;
              break;
          }
          else {
            isValid = false;
            errors += "Please enter a valid Mill Location\n";
          }
          break;
        case "id":
              dict["ID"] = value;
              break;

      }
    })
    if (isValid) {
        console.log(dict);
        console.log(checkered);
      $this.val('Edit');
      tds.prop('contenteditable', false);
      $this.closest('tr').find('select').attr("disabled", true);
      var request = $.ajax({
          type: "POST",
          url: "update.php",
          data: dict, checkered,
          success: function(data){
              console.log(dict);
              console.log(checkered);
            }
        });

        request.done(function (response, textStatus, jqXHR){
          if(JSON.parse(response) == true){
            console.log("row updated");
          } else {
            console.log("row failed to updated");
            console.log(response);
            console.log(textStatus);
            console.log(jqXHR);
          }
        });
      }
    }
 });

update.php :

  $species = $_POST['Species'];
  $container = $_POST['Container'];
  $supp_name = $_POST['Supplier-Name'];
  $supp_sku = $_POST['Supplier-SKU'];
  $current_sku = $_POST['Current-SKU'];
  $mill = $_POST['Mill'];
  $lead_time = $_POST['Lead-Time'];
  $less_than_unit_cost = $_POST['Less-Than-Unit-Cost'];
  $unit_cost = $_POST['Unit-Cost'];
  $mill_direct_cost = $_POST['Mill-Direct-Cost'];
  $unit_quantity = $_POST['Unit-Quantity'];
  $bundle_cost = $_POST['Bundle-Cost'];
  $mixed_unit_price = $_POST['6+-Mixed-Unit-Price'];
  $uom = $_POST['UOM'];
  $mill_loc = $_POST['Mill-Location'];
  $id = $_POST['ID'];
  $selected = $_POST['checkered'];

  $host="xxxxxxx"; 
  $dbName="xxxx"; 
  $dbUser="xxxxxxxxxxxx"; 
  $dbPass="xxxxxxxxx";

  $pdo = new PDO("sqlsrv:Server=$host;Database=$dbName", $dbUser, $dbPass);
  $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

  $sql = "UPDATE Example_Table SET [Species] = '$species',
  [Container] = '$container',
  [Supplier-Name] = '$supp_name',
  [Supplier-SKU] = '$supp_sku',
  [Current-SKU] = '$current_sku',
  [Mill] = '$mill',
  [Lead-Time] = '$lead_time',
  [Less-Than-Unit-Cost] = '$less_than_unit_cost',
  [Unit-Cost] = '$unit_cost',
  [Mill-Direct-Cost] = '$mill_direct_cost',
  [Unit-Quantity] = '$unit_quantity',
  [Bundle-Cost] = '$bundle_cost',
  [6+-Mixed-Unit-Price] = '$mixed_unit_price',
  [UOM] = '$uom',
  [Mill-Location] = '$mill_loc',
  [Price-Selected] = '$selected'

WHERE ID = '$id'";

  $stmt = $pdo->prepare($sql);  
  $result = $stmt->execute();
  echo json_encode($result);

最佳答案

您定义的 ajax 数据有误,它必须是 Type: PlainObject or String or Array ,因此您需要将 chekered 值附加到 dic 对象:

dict['checkered'] = checkered;

var request = $.ajax({
      type: "POST",
      url: "update.php",
      data: dict,
      success: function(data){
          console.log(dict);
          console.log(checkered);
        }
    });

关于javascript - 通过 AJAX 发送变量后无法获取 $_POST 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47835607/

相关文章:

javascript - 将子项添加到 Container() EaselJS

php - 通知: Array to string conversion with update statment

sql-server - 减少 MS SQL 数据库备份文件大小的方法

sql-server - linux上的Django-pyodbc SQL Server/freetds服务器连接问题

javascript - JSON/jQuery 语法问题?

javascript - Firefox 上的嵌套 z-index 问题,较高的 z-index 落后于较低的 z-index

javascript - EmberJS 历史/撤消

php - Blueimp jQuery 文件上传,传递额外的表单数据

php - 启用复选框时禁用 <select>

sql-server - SQL 级联删除多列