一个href点击延迟文件下载来运行Ajax

时间:2013-09-06 16:33:53

标签: jquery ajax href

我遇到了一些代码问题。我有一个href链接,一旦点击就会下载文档。出于某种原因,这会干扰我的jQuery getJSON

当我添加e.preventDefault()时,我的代码执行得非常完美。当我发表评论e.preventDefault()时,我的JSON代码永远不会执行。

这是我的href链接:

<a href="http://server:88/Documents/@Html.DisplayFor(model => model.path)" data-docid="@Html.Raw(Model.documentID)" class="btn documentLock" data-toggle="modal">
                                Download Word Version</a>

这是我的jQuery:

jQuery('.documentLock').click(function (e) {
        // Stop the default behavior
        e.preventDefault();

        var object = jQuery(this);
        var docid = object.attr('data-docid');

        jQuery.getJSON("/Document/LockedStatus/" + docid, null, function (data) {

        })
        .fail('Could not communicate with the server, if this persists please contact the Computer department')
        .success(function (data) {
            if (data) {
                console.log(data);
                jAlert('This document is currently locked by and cannot be edited further', 'Document Locked');

            }
        });
    });

使用e.preventDefault我将触发console.log(数据)。与e.preventDefault它不会发射。所以我知道代码是有效的,它必须与下载文档的链接有关。

2 个答案:

答案 0 :(得分:3)

将此添加到您的代码中

.done(function() { 
window.location.replace("your url"); // give your url here

})

这是您编辑的代码

jQuery('.documentLock').click(function (e) {
    // Stop the default behavior
    e.preventDefault();

    var object = jQuery(this);
    var docid = object.attr('data-docid');

    jQuery.getJSON("/Document/LockedStatus/" + docid, null, function (data) {

    })
        .fail('Could not communicate with the server, if this persists please contact the Computer department')
        .success(function (data) {
        if (data) {
            console.log(data);
            jAlert('This document is currently locked by and cannot be edited further', 'Document Locked');

        }
    })
  .done(function () {
        window.location.replace("your url"); // give your url here

    });
});

答案 1 :(得分:-1)

href属性被抬高了。如果您可以将其更改为javascript:void(0);或只是标签,那可能会有所帮助。

为什么不使用.data()

将此更改为var docid = object.attr('data-docid');

var docid = object.data('docid');