我正在尝试在 javascript/jquery 中编写一个脚本,该脚本会将值发送到 php 文件,然后该文件将更新数据库。问题是 PHP 文件没有读取这些值,我不知道为什么。我对值进行了硬编码,效果很好。有什么想法吗?
这是 JavaScript:
var hours = document.getElementById("hours");
var i = 1;
while(i < numberofMembers) {
var memberID = document.getElementById("member"+i);
if(memberID && memberID.checked) {
var memberID = document.getElementById("member"+i).value;
$.ajax({
type : 'post',
datatype: 'json',
url : 'subtract.php',
data : {hours : hours.value, memberID : memberID.value},
success: function(response) {
if(response == 'success') {
alert('Hours subtracted!');
} else {
alert('Error!');
}
}
});
}
i++;
}
}
减去.php:
if(!empty($_POST['hours']) AND !empty($_POST['memberID'])) {
$hoursToSubtract = (int)$_POST['hours'];
$studentIDString = (int)$_POST['memberID'];
}
$query = mysql_query("SELECT * FROM `user_trials` WHERE `studentid` = '$studentIDString' LIMIT 1");
编辑:按照@Daedal 的代码更新了代码。我仍然无法获取 PHP 中的数据,尝试运行 FirePHP,但我得到的只是“配置文件仍在运行”,然后什么也没有。
最佳答案
这可能对您有帮助:
function subtractHours(numberofMembers) {
var hours = document.getElementById('hours');
var i = 1;
while(i < numberofMembers) {
// Put the element in var
var memberID = document.getElementById(i);
// Check if exists and if it's checked
if(memberID && memberID.checked) {
// Use hours.value and memberID.value in your $.POST data
// {hours : hours.value, memberID : memberID.value}
console.log(hours.value + ' - ' + memberID.value);
// $ajax is kinda longer version of $.post api.jquery.com/jQuery.ajax/
$.ajax({
type : 'post',
dataType : 'json', // http://en.wikipedia.org/wiki/JSON
url : 'subtract.php',
data : { hours : hours.value, memberID : memberID.value},
success: function(response) {
if( response.type == 'success' ) {
alert('Bravo! ' + response.result);
} else {
alert('Error!');
};
}
});
}
i++;
}
}
和 PHP 部分:
$result = array();
// Assuming we are dealing with numbers
if ( ! empty( $_POST['hours'] ) AND ! empty( $_POST['memberID'] ) ) {
$result['type'] = "success";
$result['result'] = (int) $_POST['hours'] . ' and ' . (int) $_POST['memberID'];
} else {
$result['type'] = "error";
}
// http://php.net/manual/en/function.json-encode.php
$result = json_encode( $result );
echo $result;
die();
此外,您可能不希望 CSS #ID 以数字开头或仅由数字组成。 CSS Tricks 解释得很好 http://css-tricks.com/ids-cannot-start-with-a-number/
您可以通过在前面放置一些字符串来简单地解决这个问题:
var memberID = document.getElementById('some_string_' + i);
这不是理想的解决方案,但它可能会帮助您解决此错误。
干杯!
更新:
我首先想到的是 #ID 带有数字,但似乎 JS 并不关心这一点(至少 CSS 不关心),但最好不要使用所有数字。所以整个错误是因为 document.getElementById()
只接受字符串。
引用:https://developer.mozilla.org/en-US/docs/DOM/document.getElementById id 是区分大小写的字符串,表示正在查找的元素的唯一 ID。
很少有成员提到转换 var i
字符串,这是解决方案的关键。所以var memberID = document.getElementById(i);
将引用转换为字符串。类似的事情可以
如果您在循环 while(i < numberofMembers) {
下定义了赖特,我认为在您的原始代码中就可以完成var i 到字符串 i = i.toString();
但我认为我们目前的解决方案更好。
关于php - 使用 jquery post 将值发送到 php 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15727517/