Ajax调用的“Aftersend”事件?

时间:2015-08-03 16:28:35

标签: php ajax

$ .ajax调用执行许多操作的PHP页面。 我希望我的用户可以在PHP脚本收到请求后关闭页面。

我如何知道脚本何时收到请求?

像...一样的东西。

$.ajax({
    url: "/my-huge-script", 
    type: "POST",
    ...
    ...
    afterSend: function(){
        alert('The script has received the request. You can close the browser.');
    }
}

提前致谢,抱歉我的英语不好。

更新

我试过了:

JS:

$.ajax({
    url: "/huge-page",
    dataType: "json",
    type: "POST",
    data: { 
        ... LARGE DATA! (base64 file)
    },
    success: function() {
        alert('The script has received the request. You can close the browser.')
    }
})

HUGE-page.php文件

<?php
header('Content-Type: application/json');
echo json_encode(array('Success' => "get it"));

... MANY operations ...

?>

但'成功'仅在PHP脚本结束时触发..

发送到PHP页面的$ _POST数据大小不一,因此我希望用户知道请求何时完成...无需等待PHP脚本的结束。

3 个答案:

答案 0 :(得分:1)

好吧,您可以在json页面打印一些huge.php

在您的页面顶部,您可以执行类似的操作

echo json_encode(array('succes' => "get it"));

你应该使用:

success: function(response){
    //...
}

并在success调用ajax函数中,检查您是否收到此消息,然后在此处添加alert

答案 1 :(得分:0)

尝试你的HUGE-PAGE.php文件:

<?php
    header('Content-Type: application/json');
    // operations should before output 
    // so =>
     ... MANY operations ...
    // output at end of the file and exit()
    // so => 
    echo json_encode(array('Success' => "get it"));
    exit();
?>

答案 2 :(得分:0)

我认为Jquery ajax的always()回调函数对你有用。请参阅下面的示例代码。

 var jqxhr = $.ajax( "example.php" )
  .done(function() {
   alert( "success" );
 })

 .always(function() {
   alert( "complete" );
  });
  

jqXHR.always(function(data | jqXHR,textStatus,jqXHR | errorThrown){   });完整回调选项的另一种结构,即   .always()方法替换了已弃用的.complete()方法。

     

响应成功的请求,函数的参数是   与.done():data,textStatus和jqXHR对象相同。对于   失败的请求参数与.fail()的参数相同:   jqXHR对象,textStatus和errorThrown。参考deferred.always()   有关实施细节。

只是提醒一下成功回调方法是折旧的,你需要使用.done()而不是success()回调函数。