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

时间:2015-01-28 07:48:28

标签: javascript php jquery

我正在尝试将我的喜欢系统升级为更实用的东西。

目前我有<a href="https://mysite/dash.php?like=<? echo $postid; ?>">Like</a>,然后在PHP中有类似的东西:如果设置了$ _GET ['like'],那么抓住用户的ID和帖子ID并调用一个名为{{1}的函数}

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

状态显示的主要部分:

like_status($post_id,$user_id);

Javascript / jQuery:

<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>

最后, 我喜欢.php脚本:

$('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;
        });
    }
});

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

我的问题:

好的,所以每当我点击“赞”按钮时,都没有任何反应。我在一个单独的页面中尝试了这个(将类型从隐藏更改为文本,并手动输入数据),它也无法正常工作。似乎javascript没有执行。我在谷歌浏览器中打开了控制台,当我点击按钮时,没有任何反应。之类似的不会发布到数据库,并且按钮不会更新。

有谁能解释我做错了什么?可能会指出我正确的方向来解决这个问题?


更新

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

这是针对每种状态显示的内容:

<?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';
    }
}
?>

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

2 个答案:

答案 0 :(得分:2)

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

如果这些元素是动态创建的(或者在你的情况下脚本在创建之前被执行),你需要设置正确的.on事件,这个事件不好,因为它绑定到元素那可能不存在。

应该是:

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

答案 1 :(得分:0)

这不是我想要做的,但它已经足够好了。我设法得到像按钮工作/更新没有刷新等。感谢大家的帮助,如果不是你的建议,我将永远不会发现这一点。

<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>