如何跟踪jQuery对话框调用的操作?

时间:2011-10-07 20:50:56

标签: javascript jquery formatting

我有点dillema:)

我有一个链接供用户对某个项目进行投票。单击链接会生成jQuery AJAX调用,检查此人是否已登录。如果没有,则对话框将显示要登录的表单。

但问题是jQuery调用登录和弹出框的整个位置在不同的位置。

我需要做的是检查用户是否已成功登录,并更新投票计数。

我在这个网站上这样做:http://www.problemio.com

到目前为止,这是我的jQuery代码:

<script type="text/javascript">
$(document).ready(function() 
{
     var $dialog = $('#loginpopup')
       .dialog({
         autoOpen: false,
         title: 'Login Dialog'
       }); 

        $("#newprofile").click(function () {
          $("#login_div").hide();
          $("#newprofileform").show();
        });


    $('.vote_up').click(function() 
    {        
        problem_id = $(this).attr("data-problem_id");

        var dataString = 'problem_id='+ problem_id + '&vote=+';

        $.ajax({
                type: "POST",
                url: "/problems/vote.php",
                dataType: "json",
                data: dataString,
                success: function(data)
                {           
                    // ? :)
                    alert (data);   
                },
                error : function(data) 
                {
                    errorMessage = data.responseText;

                    if ( errorMessage == "not_logged_in" )
                    {
                        // Try to create the popup that asks user to log in.
                        $dialog.dialog('open');

                        // prevent the default action, e.g., following a link
                        return false;
                    }
                    else
                    {
                        alert ("not");
                    }

                    //alert(JSON.stringify(data));
                }
            });


        //Return false to prevent page navigation
        return false;
    });

    $('.vote_down').click(function() 
    {
        alert("down");

        problem_id = $(this).attr("data-problem_id");

        var dataString = 'problem_id='+ problem_id + '&vote=-';        

        //Return false to prevent page navigation
        return false;
    });    
});
</script>

除了$dialog.dialog('open');之后,它一切正常 - 我不知道如何

  1. 获取失败成功的信号,并且不知道具体如何
  2. 更新投票的项目,因为它只是可以在页面中投票的众多项目之一。
  3. 我该怎么做这两件事?

1 个答案:

答案 0 :(得分:1)

尝试这种方法:

  1. div中有一个隐藏的输入,即您的登录对话框。
  2. 在执行problem_id
  3. 之前,使用.dialog('open')进行设置
  4. 点击Login按钮的成功回调,从隐藏的输入中检索problem_id并执行投票或投票。
  5. 希望有所帮助

    编辑:(尝试在OP的第二次评论后编写可行的示例)

    <script type="text/javascript">
        $(document).ready(function() {
            var $dialog = $('#loginpopup')
                    .dialog({
                        autoOpen: false,
                        title: 'Login Dialog'
                    });
    
            var $problemId = $('#theProblemId', '#loginpopup');
    
            $("#newprofile").click(function () {
                $("#login_div").hide();
                $("#newprofileform").show();
            });
    
    
            $('.vote_up').click(function() {
                var problem_id = $(this).attr("data-problem_id");
                voteUp(problem_id);
                //Return false to prevent page navigation
                return false;
            });
    
            var voteUp = function(problem_id) {
                var dataString = 'problem_id=' + problem_id + '&vote=+';
    
                $.ajax({
                    type: "POST",
                    url: "/problems/vote.php",
                    dataType: "json",
                    data: dataString,
                    success: function(data) {
                        // ? :)
                        alert(data);
                    },
                    error : function(data) {
                        errorMessage = data.responseText;
                        if (errorMessage == "not_logged_in") {
                            //set the current problem id to the one within the dialog
                            $problemId.val(problem_id);
    
                            // Try to create the popup that asks user to log in.
                            $dialog.dialog('open');
    
                            // prevent the default action, e.g., following a link
                            return false;
                        }
                        else {
                            alert("not");
                        }
    
                        //alert(JSON.stringify(data));
                    }
                });
            };
    
            $('.vote_down').click(function() {
                alert("down");
    
                problem_id = $(this).attr("data-problem_id");
    
                var dataString = 'problem_id=' + problem_id + '&vote=-';
    
                //Return false to prevent page navigation
                return false;
            });
    
            $('#loginButton', '#loginpopup').click(function() {
                $.ajax({
                    url:'url to do the login',
                    success:function() {
                        //now call cote up 
                        voteUp($problemId.val());
                    }
                });
            });
        });
    </script>