提交多个输入字段 jQuery/PHP 的最佳方式


Best way to submit multiple input fields jQuery/PHP?

我正在尝试将我的同类系统升级到更实用的系统。

目前我有它像<a href="https://mysite/dash.php?like=<? echo $postid; ?>">Like</a>然后在PHP中有这样的东西:如果设置了$_GET['like'],则获取用户的ID和帖子ID并调用一个名为like_status($post_id,$user_id);的函数

但是,我一直在研究这样的事情:

显示在状态上的主要部分:

<script src="https://mysite/stuff/jquery.min.js"></script>
<script src="https://mysite/stuff/js/global.js"></script>
<input type="hidden" id="postid" value="<? echo $postid; ?>">
<input type="hidden" id="userid" value="<? echo $session_user_id; ?>">
<span id="like-button" style="color:red;">Like</span>

Javascript/jQuery:

$('span#like-button').on('click', function(){
    var postid = $('input#postid').val();
    var userid = $('input#userid').val();
    if (postid != ''){
        $.post('https://mysite/stuff/ajax/like.php', {postid: postid, userid: userid}, function(data){
            document.getElementById('like-button').innerHTML = data;
        });
    }
});

最后,我喜欢.php脚本:

<?php
if(isset($_POST['postid']) === true && empty($_POST['userid']) === false){
    include $_SERVER['DOCUMENT_ROOT'].'/stuff/init.php';
    if(is_liked($_POST['postid'],$_POST['userid']) === true){
        unlike_status($_POST['postid'],$_POST['userid']);
        echo 'Like';
    } else {
        like_status($_POST['postid'],$_POST['userid']);
        echo 'Unlike';
    }
}
?>

我的不喜欢/类似功能工作正常。我现在有一个类似工作的系统,但它每次都会让用户刷新和所有内容,而且非常不方便。我想使用此方法自动更新喜欢按钮,而无需刷新页面或任何东西。这样,用户可以喜欢页面上的多个内容,而不必每次都刷新页面。我也认为它更安全,因为 $_GET['like'] 可以更改为任何 id,即使用户不是其他用户的朋友,或者状态不存在。

我的问题:

好的,所以每当我单击"喜欢"按钮时,什么都不会发生。我也在单独的页面中尝试了这个(将类型从隐藏更改为文本,并手动输入数据),但它也没有用。似乎javascript没有执行。我已经在谷歌浏览器中打开了控制台,当我单击该按钮时,没有任何反应。类似内容不会发布到数据库,按钮也不会更新。

谁能解释我做错了什么?可能为我指出解决此问题的正确方向?


更新

我尝试将Javascript/HTML组合在一个页面中以拥有动态变量。

以下是每个状态显示的内容:

<script src="https://mysite/stuff/jquery.min.js"></script>
    <script type="Javascript">
$(document.body).on('click','#like-button', function(
        var postid<? echo $status_id; ?> = $('input#postid<? echo $status_id; ?>').val();
        var userid<? echo $status_id; ?> = $('input#userid<? echo $status_id; ?>').val();
        $.post('https://mysite/stuff/ajax/like.php', {postid: postid<? echo $status_id; ?>, userid: userid<? echo $status_id; ?>}, function(data){
            document.getElementById('like-button').innerHTML = data;
        });
));
</script>
<input type="hidden" id="postid<? echo $status_id; ?>" value="<? echo $status_id; ?>">
<input type="hidden" id="userid<? echo $status_id; ?>" value="<? echo $session_user_id; ?>">
<span id="like-button" style="color:red;"><? if(isliked($status_id,$session_user_id) === true){ ?>Unlike<? } else { ?>Like<?}?></span>

我仍然无法让它执行脚本。

您始终可以使用 $('#fomrm_id').serialize() ,在 POST data 中一次获取所有表单字段。它会刷新页面,因为您必须return false;添加到jQuery.click事件的末尾。

如果这些元素是动态创建的(或者就像在创建它们之前执行脚本一样),您需要设置适当的.on事件,这个事件不好,因为它绑定到可能不存在的元素。

应该是:

$(document.body).on('click','#like-button', function(){..}); - 这会将其绑定到 document body ,它始终存在,但如果匹配,则会在第二个参数中检查选择器。

这不是我想做的,但它已经足够好了。我设法让喜欢按钮在不刷新等的情况下工作/更新。感谢大家的帮助,如果不是你的建议,我永远不会发现这一点。

<input type="hidden" id="postid" value="<? echo $status_id; ?>"><br>
<input type="hidden" id="userid" value="<? echo $session_user_id; ?>"><br>
<span id="like-button" style="color:red;"><? if(isliked($status_id,$session_user_id) === true){ ?>Unlike<? } else { ?>Like<? } ?></span>
<script>
$('span#like-button').on('click', function(){
    var postid = $('input#postid').val();
    var userid = $('input#userid').val();
    <? if(isliked($status_id,$session_user_id) === true){ ?>
    $.get('https://mysite/dash', {unlike: postid, userid: userid}, function(data){
        document.getElementById('like-button').innerHTML = 'Like';
    });
    <? } else { ?>
    $.get('https://mysite/dash', {like: postid, userid: userid}, function(data){
        document.getElementById('like-button').innerHTML = 'Unike';
    });
    <? } ?>
});
</script>