链接onclick和输入[type ='button'] onclick表现不同?

时间:2014-01-10 14:48:32

标签: javascript html ajax

我有一段代码,其中有一个链接和一个输入按钮都调用相同的onclick功能。但是,它们的表现不同。

<input type="button" onclick="undelete_this(&quot;profile.php&quot;, 42)" value="Undelete">

<a href="" onclick="undelete_this(&quot;profile.php&quot;,42)"><strong>here</strong></a>


function undelete_this(url, id){
    if(confirm("Are you sure you want to undelete this record?")){
        if(id!=="" && id!=0){
            var info = 'id=' + id +"&action=undelete";
            $.ajax({
                type: "GET",
                url: url,
                data: info,
                success: function(){
                    window.location.href = ($(location).attr('pathname')+"?enter=false&id="+id);
                },
                error: function(jqXHR, exception, realexception) {
                        alert(jqXHR.responseText+" "+realexception);
                }
            }
            )
        }
    }
    return false;

}

单击按钮时,ajax状态为成功;但是当单击链接时,ajax状态为错误(错误代码= 0),并且responseText为空。

有没有人知道为什么会这样?

2 个答案:

答案 0 :(得分:1)

因为拥有空href会导致在单击链接时重新加载页面。重新加载页面(通常:导航到任何URL)会中止任何未完成的AJAX请求,这就是您没有得到回复的原因。

可能的解决方案:

  • onclick="undelete_this(&quot;profile.php&quot;,42); return false;"将取消默认操作(重新加载页面)
  • href="javascript:;"会将默认操作设为no-op,再次阻止重新加载页面

答案 1 :(得分:0)

您不能简单地将href留空,因​​为href=''是返回当前页面的链接(即它会导致页面刷新)。

有一种方法可以使链接在单击时完全没有任何内容(除非Javascript事件绑定到它)。

<a href="javascript:undelete_this(&quot;profile.php&quot;,42);"><strong>here</strong></a>