php - 使用 jquery post 将值发送到 php 文件

标签 php javascript jquery

我正在尝试在 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/

相关文章:

php - 在后端加载目录设置时出现 fatal error

javascript - 将 '+'(加号)等特殊字符从 Angular 传递到 Express.js 不起作用

javascript - 碰撞不能正常工作

jquery - 如何选择div包含父div属性?

php - 关注者列表最好存储在 CSV 数据库字段中吗?

php - 用于 SELECT 查询的多个 HTML 字段

javascript - Node.js 同时导出路由和函数

javascript - 使用 jQquery 或 JavaScript 对嵌套 html 元素进行排序

javascript - Jquery ajax() 函数不会加载 PHP 脚本

php - 在 PHP 中将数组转换为简单的 1 级数组