1

我正在尝试在重定向之前发送一个 ajax 调用(用于记录目的)。实际上,重定向是一个正确设置了 octet-stream 和 disposition 的下载。所以ajax调用不会在所有浏览器(尤其是chrome)上被调用。在其他像 IE 中它确实如此。我如何确保调用 SURE 被执行?

这是代码:

$(function() {
    $('#download-link-a').click(function() {
        remoteLog ('Clicked on download', '<?php echo $username; ?>' );
        location.href = "<?php echo $secure_link; ?>";
        return false;
    });
});
function remoteLog (arg, key) {
    var file = '/files/remoteLog.php';
    $.post(file, {text: arg, key: key});
}
4

4 回答 4

2

只有在成功后,您才需要使用回调函数来调用重定向POST。我建议您使用$.ajax(),而不是$.post()因为它更可定制。

以下是如何使用适当的回调函数将您的$.post()转换为$.ajax()等价物:

$(function() {
    $('#download-link-a').click(function() {
        remoteLog ('Clicked on download', '<?php echo $username; ?>' );
        return false;
    });
});

function remoteLog (arg, key) {

    var fnSuccess = function() {
        location.href = "<?php echo $secure_link; ?>";
    };

    var fnFail = function() {
        alert('POST failed. Do not redirect!');
    };

    $.ajax({
      type: 'POST',
      url: '/files/remoteLog.php',
      success: fnSuccess,
      error: fnFail,
      data: {text: arg, key: key},
      dataType: 'json',
      async:true
    });
}

更多阅读:jQuery.ajax()

于 2013-01-27T10:24:56.787 回答
1

将重定向移动到回调函数:

function remoteLog (arg, key) {
    var file = '/files/remoteLog.php';
    $.post(file, {text: arg, key: key})
      .always(function(){location.href = "<?php echo $secure_link; ?>";});
}
于 2013-01-27T10:23:24.573 回答
0
$(function() {
    $('#download-link-a').click(function(e) {
        e.preventDefault();
        remoteLog ('Clicked on download', '<?php echo $username; ?>' );

    });
});
function remoteLog (arg, key) {
    var file = '/files/remoteLog.php';
    var jqPost = $.post(file, {text: arg, key: key})
    .always( function() { //or .done() can also be used
       location.href = "<?php echo $secure_link; ?>";
        return false;
    });
}
于 2013-01-27T10:20:39.377 回答
0

我会使用onbeforeunload一个同步 ajax 调用。

$("#some-link").click(function(evt){
     this.outlink = $(this).attr("href");
     this.outtext = "Some text";
});

window.onbeforeunload = function(){
  data = {text:this.outtext,outlink:this.outlink};
  $.ajax({
    url:url,
    type:"POST",
    data:data,
    async:false
  });
};

事实上,您唯一的问题是asyncajax 调用的一部分。

于 2013-01-27T10:30:01.280 回答