1. 程式人生 > >IE6中請求莫名中斷(條件:a標籤,click事件中有ajax請求,a標籤中有href且是JavaScript:void(0);或JavaScript:;等阻斷跳轉程式碼)

IE6中請求莫名中斷(條件:a標籤,click事件中有ajax請求,a標籤中有href且是JavaScript:void(0);或JavaScript:;等阻斷跳轉程式碼)

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
  var url = "http://api.flickr.com/services/"
    "feeds/photos_public.gne?tags=car&"
    "tagmode=any&format=json&jsoncallback=?";
  $( "#btn" ).click(function(){
    $.getJSON( url, function( data ){
      alert(  data );
    });   });
</script>

在IE6中使用Fiddler2監視請求,經常會出現”aborted”,折騰了許久,相當的詭異。後來將a標籤換成button,請求正常,最後經提醒,可能是a標籤的預設事件中斷了請求。但是,在HTML程式碼中,已經將a標籤的href設定成了”javascript:;”,通常這樣是可以阻止預設事件了(頁面跳轉)。a標籤的click事件會先執行,然後才執行href的跳轉,如果href是一段javascript語句,這個時候就會執行。IE6在執行href的javascript語句時就中斷了click觸發的ajax請求。使用href=”javascript:;”是為了阻止預設事件,將阻止預設事件的動作移到click事件中就可以解決問題了,這樣就不會執行href中的javascript語句了。

$( "#btn" ).click(function(e){
    $.getJSON( url, function( data ){
           alert( data );
    });
   e.preventDefault();
});

結合下自己遇到的情況程式碼如下: html程式碼如下:
<a class="js_statrPrize" text="go" href="javascript:void(0);">報名參加</a>

js程式碼如下:
$(".js_statrPrize").click(function () {
        $.ajax({
            url:urls.loginUrl,
            type:"get",
            dataType:"jsonp",
            jsonp:"jsoncallback",
            data:{
                r:Math.random()
            },
            success:function(d){
                if (d.IsSuccess) {
                    if (defaults.successFn) {
                        defaults.successFn(d);
                    }
                } else {
                    if (defaults.failFn) {
                        defaults.failFn(d);
                    }
                }
            },
            error:function(){
                alert("程式錯誤");
            }
        });
    });

在ie6下直接走error了,一點選這個按鈕直接alert“程式出錯”;從昨天一直翻到今天終於找到了本文的答案。