Rit*_*ora 18 javascript ajax jquery
我使用jquery ajax方法向web服务器发送大量数据,客户端只在收到服务器的确认后才响应,现在假设网络连接在ajax调用的MIDDLE中丢失,那么如何检测这种情况.
$.ajax({
url:'server.php',
data:'lots of data from 200KB to 5MB',
type:'post',
success: function(data)
{
alert('Success');
//some stuff on success
},
error: function(XMLHttpRequest, textStatus, errorThrown)
{
alert('Failure');
//some stuff on failure
}
});
Run Code Online (Sandbox Code Playgroud)
这是我的代码,如果让互联网断开连接,它在ajax调用中间不会出错.
注意:我无法使用超时,因为数据大小从200kb到5MB不等,服务器响应时间计算不可行.
试试这个:
首先每隔5秒用setInterval创建一个"ping"ajax调用
function server_ping()
{
$.ajax({
url:"url to ping",
type: "POST"
});
}
var validateSession = setInterval(server_ping, 5000);
Run Code Online (Sandbox Code Playgroud)
然后武装你的.ajaxError陷阱:
$(document).ajaxError(function( event, request, settings ) {
//When XHR Status code is 0 there is no connection with the server
if (request.status == 0){
alert("Communication with the server is lost!");
}
});
Run Code Online (Sandbox Code Playgroud)
记住Ajax调用默认是异步的,所以当ping进入服务器并且请求无法到达服务器时,XHR状态的值为0,并且.ajaxError将触发,你必须捕获错误并处理你的方式想要它.
然后,您可以将数据发送到服务器,如果在发送数据时连接丢失,则会收到ping报告的错误.
尝试在构建 $.ajax({}) 时添加 timeout: 。
还要确保设置cache: false,有时很有用。
参考Jquery的ajax():http://api.jquery.com/jQuery.ajax/#toptions
您将在那里获得更多信息!
我对你的问题的看法[更新]
@RiteshChandora,我理解你的担忧。我可以建议你做两件事。
由于您发布的数据范围为 200kb 到 5mb,因此您可能需要选择最大超时。并触发相同的操作。是的,这可能会有问题,但根据您选择的设计,监视 POST 进度的唯一方法就是这样做。如果没有,请参见第 2 点。
我经历了流程,您要求用户将响应 Json 从 FB 复制到您的网址。这里有一些问题,
json 数据包含有关用户的敏感信息,并且他将其发布到未经 SSL 加密的 URL 上。
为什么要提示用户将获取的数据发布到您的服务器上?如果您使用服务器端脚本,应该会更容易。另外,在这种情况下,您不应该将大量数据从客户端发布到服务器,您可以在服务器端从 FBserver->您的服务器检索相同的表单。
我建议的解决方案:用户通过身份验证后,在服务器端检索他的好友列表。在服务器端做任何你想做的事情,并将结果显示在用户屏幕上。
这样所有的负担都将由你的服务器承担,用户也不需要在你的 url 上发布任何令人讨厌的 json 内容。
顺便说一句,你的应用程序想法很酷。
| 归档时间: |
|
| 查看次数: |
27103 次 |
| 最近记录: |