为什么返回错误会停止警报?

时间:2010-03-10 07:45:12

标签: javascript jquery

为什么return false阻止alert()工作,我该如何解决这个问题?如果我将其删除,则会显示警报,然后它会加载<a>标记所指向的页面。

<script type="text/javascript">
    $("document").ready(function(){
        $("a").click(function(){
            if(!$(this).is('static')){
                var href = $(this).attr('href');
                $.getJSON(href, function(data) {
                    alert('hi');
                });
            }
            return false;
        });
    });
</script>

3 个答案:

答案 0 :(得分:4)

我的猜测是,正在向客户端发送格式错误的JSON,阻止回调被触发。 manual说:

  

如果JSON中存在语法错误   文件,请求通常会失败   默默。避免频繁的手工编辑   由于这个原因,JSON数据。

您能告诉我们服务器正在生成的JSON的快照吗?

答案 1 :(得分:3)

回答更新!

我已经使用$ .ajax函数彻底测试了这个函数,这是$ .getJSON实际调用的函数。

$("document").ready(function(){
    $("a").click(function(event){
        if(!$(this).is('static')){
            var href = $(this).attr('href');
            $.ajax({
              url: href,
              dataType: 'text',
              success: function(data) {
                  alert("hi");
              }
            });

        }
        return false;
    });
});

使用格式正确的JSON对象,这可以按预期工作。以下是我的json.html测试文件的内容:

{ "firstName" : "John",
                "lastName"  : "Doe",
                "age"       : 23 }

但是,如果文件包含HTML或格式错误的JSON对象,则永远不会调用警报 - 实际上,通过向上面的示例添加错误处理程序,您会发现它出错:

$("document").ready(function(){
    $("a").click(function(event){
        if(!$(this).is('static')){
            var href = $(this).attr('href');
            $.ajax({
              url: href,
              dataType: 'text',
              success: function(data) {
                  alert("hi");
              },
              error: function() {
                alert("NO!!!!");
              }
            });

        }
        return false;
    });
});

当您使用此请求替换代码中的超链接时,我猜您可能想要使用$ .get,而不是$ .getJSON。所以回到原来的例子:

<script type="text/javascript">
    $("document").ready(function(){
        $("a").click(function(){
            if(!$(this).is('static')){
                var href = $(this).attr('href');
                $.get(href, function(data) {
                    alert('hi');
                });
            }
            return false;
        });
    });
</script>

答案 2 :(得分:0)

这似乎适用于Firefox 3和Chrome,同时包含get和getJSON。

IE8是另一个故事(我认为IE7也是如此)。那里,只有工作; getJSON失败。服务器返回的JSON不是IE友好的吗?