2013-10-25 87 views
0

是否可以使用AJAX來改變[href $ ='。pdf']的值?我有一個有幾個鏈接的頁面。我需要在每個鏈接的PDF的開頭插入「/download.php?file=」來強制下載,而不是在瀏覽器中打開。jQuery/AJAX更新[href]?

我知道這可以單獨使用JS/jQuery完成,但我需要在AJAX中執行此操作。我之前並沒有在AJAX方面做過很多工作,並且在Google上找不到答案。下面是我想到的代碼,從網上瀏覽,但它沒有做任何事情。不知道它是否可能。

$(function(){ 
var collID = document.location.pathname.match(/[^\/]+$/)[0]; 
    collID = collID.substring(0, collID.length - 5); 
    $("a[href$='.pdf']").each(function() { 
     $.ajax ({ 
      type: 'POST', 
      dataType: 'json', 
      success: function() { 
       $(this).attr("href", "/download.php?file=collections/ms/" + collID + "/" + curA); 
      }    
     }); 
    }); 
}); 

更新:我被告知,因爲我已經使用了AJAX位的插入PDF的大小使用AJAX這一點。當我使用jQuery來更改href值時,插入的文件大小不再起作用,因爲它不再是文件的直接鏈接。這是代碼。

function hdrDetails(i, elm, cl) { 
    cl = cl/1024; 
    //divide content-length by 1024 (KB) 
    var sz = cl > 1024 ? "MB" : "KB"; 
    //if cl is still big, set to MB 
    cl = cl > 1024 ? cl/1024 : cl; 
    //if cl is still big, divide again 
    var len = $(elm).eq(i).text().length; 
    //check the link's text length 
    if (len > 0) { 
     //add a file size 
     var $e = $(elm).eq(i); 
     var t = $e.text(); 
     $e.html(t.slice(0, -1) + "<span class=\"size\"> (" + cl.toFixed(2) + " " + sz + ")</span>" + t.slice(-1)); 
    } 
} 
$(function() { 
    var elm = "a[href$='.pdf']," + //only the file types we want 
    "a[href$='.doc']," + "a[href$='.ppt']," + "a[href$='.xls']," + "a[href$='.docx']," + //don't forget 2007 versions 
    "a[href$='.pptx']," + "a[href$='.mht']," + "a[href$='.xlsx']"; 
    $(elm).each(function (i, e) { 
     if (e.hostname && e.hostname == location.hostname) { 
      $.ajax({ 
       type: "HEAD", 
       url: $(this).attr("href"), 
       complete: function (xhr, textStatus) { 
        var cl = xhr.getResponseHeader("content-length"); 
        if (textStatus == "success") { 
         var cl = xhr.getResponseHeader("content-length"); 
         hdrDetails(i, elm, cl); 
         //call the calculation fn 
        } else { 
         var $e = $(elm).eq(i); 
         var t = $e.text(); 
         $e.html(t.slice(0, -1) + "<span class=\"size\"> (File Not Found)</span>" + t.slice(-1)); 
        } 
       } 
      }); 
     } 
    }); 
}); 
+2

這沒有任何意義。爲什麼你需要爲此使用AJAX?您的AJAX調用沒有URL,也不使用返回值。你能澄清嗎? – David

+0

和你正在做Ajax請求的網址是什麼? –

+0

嗯,我似乎已經失去了curA,它應該是AJAX魔術之前的HREF值,所以我可以將它添加回來...... – Nathan

回答

1

我沒有看到你爲什麼需要在代碼中調用$.ajax ...有你需要讓你可以通過JavaScript解決您的錨標記服務器上的數據?這是我看到你需要AJAX呼叫的唯一原因。此外,在進行AJAX調用時,您通常要使用響應,該響應是傳遞給jQuery success函數的參數。由於您沒有使用它,因此不需要AJAX調用。另外,通過循環進行AJAX調用通常是不好的做法(.each()是一個循環)。通過在一個循環中進行AJAX調用,您可能會難以達到服務器的性能。最好做一個大批量的請求/響應來獲取你需要的數據

+0

是的,服務器上有數據。查看上面更新的問題,我使用AJAX獲取文件大小並將其插入鏈接文本。當我使用jQuery來更改href時,插入文件大小的位不起作用,因爲它不再是直接文件路徑。我嘗試插入一些邏輯來解析HREF並獲取文件變量的值,並使用它來插入文件大小,但它不起作用。 – Nathan