2010-06-10 30 views
2
下一頁

之前,我需要發送點擊我的網站信息使用AJAX(JSON)第三方服務器不能完成。我正在使用jquery,並將點擊事件添加到某些鏈接。在點擊事件中,我正在向具有點擊位置(熱圖)和其他信息的遠程服務器發出json請求。 問題是,在默認鏈接動作發生之前,ajax函數不能及時觸發。將async設置爲false似乎不適用於遠程ajax調用。我已經嘗試preventDefault(),但是我不知道如何在成功的ajax調用之後運行默認操作。這是我想要做的:遠程Ajax調用jQuery中。點擊()函數將

$('a').click(submit_click); 

function submit_click(e,fireAjax){ 
    e.preventDefault(); 
    cd_$.ajax({ 
     url: jsonUrl, //remote server 
     dataType: 'json', 
     data: jsonData, 
     async: false, 
     success: function(reply){ 
      //Run the default action here if I have to disable the default action 
     }, 
    }); 
} 

有什麼建議嗎?

換句話說

回答

1

呀,你就必須

  • 捕獲該鏈接的href值在submit_click功能
  • 變化對你的成功功能頁面的URL來存儲href的值

    $( 'A')點擊(submit_click)

  • 將返回false。

    function submit_click(e,fireAjax){ 
        e.preventDefault(); 
        var oldHref = $(this).attr('href'); // store the old url 
        cd_$.ajax({ 
         url: jsonUrl, //remote server 
         dataType: 'json', 
         data: jsonData, 
         async: false, 
         success: function(reply){ 
          //Run the default action here if I have to disable the default action 
          window.location.href = oldHref; // go to the new url 
         }, 
        }); 
        return false; // don't actually go to the href 
    } 
    
+0

Dang,所以如果我想在提交按鈕上做同樣的事情,我將不得不檢測被點擊的東西的類型,並調用相應的操作(提交表單或轉到鏈接)? – Clint 2010-06-10 15:28:14

+0

那麼在提交按鈕上,你最好使用實際形式的提交處理程序..'$('#myForm')。submit(function(){'and do your stuff – 2010-06-10 15:35:47

+1

Thanks Dan!我仍然希望有一種方法來接受事件對象並觸發默認事件...(egefireOriginalEvent(),但你的方式將正常工作。 – Clint 2010-06-10 15:40:41

0

所以,你試圖在同一時刻做兩件事情:

<a ID="SOMETAG" href="...">link</a> 

function onClick() { 
    // Attached to "#SOMETAG" and does an AJAX call ... 
} 

,並要離開的SOMETAG萬一HREF他們關閉了JavaScript?

我認爲解決的辦法是,當你連接到onclick處理程序,你應該通過JavaScript刪除HREF,然後纔有的onSuccess編程方式調用HREF。

因爲我不明白,你可以讓瀏覽器產生新的進程來完成AJAX調用你,那寧可擊敗模型。如果我從一個頁面導航離去(或關閉選項卡),我不希望瀏覽器繼續談代表我的服務器...

+0

我可能不會真正徹底去除DOM中的href - 纔有的onClick「返回false」 – 2010-06-10 15:25:43

+0

@MatthewĴ莫里森〜我看不出區別在消除HREF或返回假,同一枚硬幣的兩面,不是? – jcolebrand 2010-06-10 15:30:16

+0

這隻會在這種情況下,但。刪除href使它不再是一個有效的A元素,所以爲什麼不像在任何其他情況下返回false一樣,您在A元素上調用代碼並且實際上並不想跟隨鏈接?我在這裏說的是最佳實踐的精神...... – 2010-06-10 15:34:33