0

我有一个 jquery 消息框的以下代码。如果我单击以下链接,则会出现一个消息框。

<p><a id="msgup" class="">Demo Top</a></p>
<script>
    $("#msgup").bar({
        color            : '#1E90FF',
        background_color : '#FFFFFF',
        removebutton     : false,
        message          : 'Your profile customization has been saved!',
        time             : 2000
    }); 
</script>

现在我想要实现的是当我在我的 ajax 服务器响应中获得“冷”作为值时显示消息框。为此,我尝试了以下代码。但它不工作。可能是因为调用 jquery 函数失败。请问如何使它工作?

$.ajax({  
    type: "POST",
    url: "<?php echo base_url(); ?>contents/hello",
    data: "id="+a_href,
    success: function(server_response) {
        if (server_response == 'cold') {

        //Beginning of the code for message box
        $("#msgup").bar({
            color            : '#1E90FF',
            background_color : '#FFFFFF',
            removebutton     : false,
            message          : 'Your profile customization has been saved!',
            time             : 2000
        });
        //End of the code for message box

        // Instead of the message box code I have tried 
        // alert('Message'); and it worked
        }                       
        else {
            $("#result").html(server_response);
        }               
    }                              
}); //$.ajax ends

提前致谢 :)

4

4 回答 4

2
$("#msgup").bar(…)

将单击事件绑定到#msgup(只是猜测),因此从 ajax 代码中调用它将无济于事。实现目标的一种可能方法是初始化 $.bar 并从 ajax 代码触发点击,可能是这样:

<p><a id="msgup" class="">Demo Top</a></p>
<script>
    $("#msgup").bar({
        color            : '#1E90FF',
        background_color : '#FFFFFF',
        removebutton     : false,
        message          : 'Your profile customization has been saved!',
        time             : 2000
    });
    $.ajax({
        type: "POST",
        url: "<?php echo base_url(); ?>contents/hello",
        data: "id="+a_href,
        success: function(server_response){
            if (server_response == 'cold'){
                //Beginning of the code for message box
                $("#msgup").click();
                //End of the code for message box
           } else {
              $("#result").html(server_response);}                   
           }
        }                             
    });   
</script> 
于 2012-05-21T15:48:11.280 回答
0

您可以在您的成功函数中放置一个alert()或。console.log()打电话alert(server_response)。甚至,alert(typeof(server_response)). 您还可以通过添加错误来查看 AJAX 是否正常返回:条件(使用它自己的函数调用,就像成功一样:)。

我的猜测是你会想要检查而不是'',对于文字'null'甚至是对象null,只要它进入成功函数。

if (server_response == '' || server_response == 'null' || server_response == null || typeof(server_response) == 'undefined') {...

一旦你知道你期望它如何回来,你就可以只使用你需要的支票。

于 2012-05-21T15:19:49.663 回答
0

您是否尝试将其包装在 setTimeout(function() { $("#msgup").bar({}); }, 100); 看看是不是时间问题?如果是这样,而不是将其放入成功:,也许将其放入完整:?

此外,如果您在 if() 中放置了一个警报,并且它被调用,那么 ID 为 #msgup 的 HTML 元素在当时存在(再次回到时间考虑)。

于 2012-05-21T15:34:59.123 回答
0

jquery.bar.js$("#msgup").bar(…)只是"#msgup"为点击事件绑定初始化元素。如果点击事件被触发,jquery.bar插件将创建新元素并将其显示为消息框。所以,你需要触发点击事件。试试这个

$.ajax({  
    type: "POST",
    url: "<?php echo base_url(); ?>contents/hello",
    data: "id="+a_href,
    success: function(server_response) {
        if (server_response == 'cold') {

        //Beginning of the code for message box
        $("#msgup").bar({
            color            : '#1E90FF',
            background_color : '#FFFFFF',
            removebutton     : false,
            message          : 'Your profile customization has been saved!',
            time             : 2000
        });
        $("#msgup").click(); //fire click event
        //End of the code for message box

        // Instead of the message box code I have tried 
        // alert('Message'); and it worked
        }                       
        else {
            $("#result").html(server_response);
        }               
    }                              
}); //$.ajax ends
于 2012-05-21T16:22:48.143 回答