1

我有以下代码:

function check_email() {
    var email = $('#email').val();
    $.post(
        "inc/check.php", 
        { email: email },
        function(result) {
            if (result == 0) {
                // Do Stuff
            }
            else {
                // Do Stuff
            }
        }
    );
}

在我的开发环境中的浏览器中,这测试很好。但是,在具有相同浏览器的其他环境中,请求似乎不会触发。我通过执行以下操作对此进行了测试:

function check_email() {
    alert('test1');
    var email = $('#email').val();
    $.post(
        "inc/check.php", 
        { email: email }, 
        function(result) {
            alert('test2');
            if (result == 0) {
                // Do Stuff
            }
            else {
                // Do Stuff
            }
        }
    );
}

第一个test1警报会触发,但第二个警报test2不会。请记住,这仅适用于某些环境。有没有人知道为什么?

4

1 回答 1

3

第一个 test1 警报触发,但第二个警报 test2 没有。请记住,这仅适用于某些环境。有没有人知道为什么?

因为在它不起作用的环境中出现了问题,所以success处理程序没有被调用。

您可以通过以下方式找出问题所在

  1. 查看浏览器的开发工具,尤其是网络选项卡,以及

  2. 使用error处理程序并检查它为您提供的信息。

选项#2将需要重写您的$.post使用(无论如何$.ajax它只是一个快捷方式/包装器),如下所示:$.ajax

$.ajax({
    type:    'POST',
    url:     "inc/check.php",
    data:    {email: email},
    success: function(result) {
        alert('test2');
        if (result == 0) {
            // Do Stuff
        }
        else {
            // Do Stuff
        }
    },
    error:   function(jqXHR, status, errThrown) {
        // Look at what went wrong here
    }
});

附带说明一下,alert-style 调试效率非常低,在 2013 年不需要它。相反,使用浏览器内置的调试器。设置断点并单步执行代码。所有主流浏览器都内置了调试器,包括 IE8 及更高版本。Firefox 的内置插件仍然相当基本,但有 Firebug 插件。Chrome 内置的工具非常出色,但同样,它们都或多或少地拥有它们。如果您绝对必须在 IE7 或 IE6 上调试某些东西,甚至还有 Visual Studio。

于 2013-01-08T09:58:25.873 回答