2013-10-25 2 views
0

Можно ли использовать AJAX для изменения значения [href $ = '. Pdf']? У меня есть страница с несколькими ссылками. Мне нужно вставить «/download.php?file=» в начало каждого связанного PDF, чтобы принудительно загрузить вместо открытия в браузере.jQuery/AJAX для обновления [href]?

Я знаю, что это можно сделать только с помощью JS/jQuery, но мне нужно сделать это в AJAX. Я не много делал с AJAX раньше, и не получаю далеко от Googling ответы. Ниже приведен код, который я придумал, от просмотра в Интернете, но он ничего не делает. Не уверен, что это даже возможно.

$(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 для этого, потому что я уже использую немного AJAX для вставки размера PDF. Когда я использую 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, это должно было быть значением HREF до магии AJAX, поэтому я мог бы добавить его обратно ... – Nathan

ответ

1

Я не там видеть, почему вам нужен $.ajax вызов в коде ... это данные на сервере, что вам нужно, так что вы можете исправить свои метки анкерные с помощью JavaScript? Это единственная причина, по которой я мог видеть, что вам нужен звонок AJAX. Кроме того, при вызове AJAX вы обычно хотите использовать ответ, который является параметром, переданным функции jQuery success. Поскольку вы не используете его, кажется, что вызов AJAX не нужен.

В целом, как правило, плохой практикой является вызов AJAX из цикла (.each() - это цикл). Вызывая вызовы AJAX в цикле, вы можете сильно ударить по своему серверу. Было бы лучше сделать один большой запрос/ответный пакет для получения нужных данных.

+0

Да, на сервере есть данные. См. Обновленный вопрос выше, я использую AJAX для захвата размера файла и вставки его в текст ссылки. Когда я использую jQuery для изменения href, бит, который вставляет размер файла, не работает, потому что это больше не прямой путь к файлу. Я попытался вставить некоторую логику для синтаксического анализа HREF и захватить значение переменной файла и использовать его для вставки размера файла, но это не сработало. – Nathan

Смежные вопросы