I have an HTML table that allows a user to edit/save any row in the table. One of the <td>
in the table rows contains only a dropdown and no actual text like all of the other columns. Whenever I hit save, my AJAX request sends all of the data through to update.php
just fine except for the <td>
with the dropdown. While I am getting the value of the dropdown in my AJAX success function, if I check my PHP error log, it says that the variable that holds the value of the dropdown, checkered
, is undefined.
我有一个HTML表格,允许用户在表格中编辑/保存任何一行。表行中有一个只包含下拉菜单,不包含与所有其他列相同的实际文本。每当我点击save,我的AJAX请求就会将所有数据发送到update。除了带有下拉菜单的之外,php没有问题。当我在AJAX success函数中获取下拉菜单的值时,如果我检查PHP错误日志,它会说包含下拉菜单值的变量是未定义的。
How can I fix my code so that it will also read whats in my checkered
variable and send that through my AJAX request as well.
如何修改代码,使它也能读取我的checkered变量中的内容,并通过AJAX请求发送。
JavaScript (the first 2 lines after the beginning of my function are what gets the value of the dropdown selection):
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
:
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);
1 个解决方案
#1
2
Your defining your ajax data wrong, it must be of Type: PlainObject or String or Array , so you need to append the chekered value to the dic object:
您对ajax数据的定义是错误的,它必须是类型的:纯对象或字符串或数组,因此您需要向dic对象追加che值:
dict['checkered'] = checkered;
var request = $.ajax({
type: "POST",
url: "update.php",
data: dict,
success: function(data){
console.log(dict);
console.log(checkered);
}
});
#1
2
Your defining your ajax data wrong, it must be of Type: PlainObject or String or Array , so you need to append the chekered value to the dic object:
您对ajax数据的定义是错误的,它必须是类型的:纯对象或字符串或数组,因此您需要向dic对象追加che值:
dict['checkered'] = checkered;
var request = $.ajax({
type: "POST",
url: "update.php",
data: dict,
success: function(data){
console.log(dict);
console.log(checkered);
}
});