我使用以下代码将数据从asp.net 2.0站点发布到将数据发布到服务器的asp.net 2.0 Web服务:
$.ajax({
type: "POST",
url: "SynchroniseCustomers.asmx/synchroniseCustomers",
data: JSON.stringify(customerObj),
contentType: "application/json; charset=utf-8",
dataType: "json",
error: function (xhr, status) {
// If not successfull
},
success: function (msg) {
deleteCustomer(customer.id);
}
});
我有一个JavaScript函数来检查我是否有连接,如果我运行同步(从Web工具包浏览器本地数据库中提取数据):
function checkConnection() {
var i = new Image();
i.onload = synchronise;
i.onerror = fail;
i.src = 'http://myurl.com/ping.gif?d=' + escape(Date());
setTimeout("checkConnection()", 60000); // Execute every minute
}
事情是,如果我在本地运行并删除我的互联网连接,Web服务将返回500错误(就像我希望它做的那样)和deleteCustomer(customer.id);不叫。但是,在实际站点上,如果我断开连接,Web服务不会返回错误并且deleteCustomer(customer.id);即使我没有连接到互联网也会被调用(客户从本地数据库中删除而不被发布到Web服务器)。
这是什么原因?如果您需要更多代码,请与我们联系。
提前致谢。
答案 0 :(得分:0)
在断开连接后你可能没等一分钟。
答案 1 :(得分:0)
有一种情况是,当您要求删除时,Ajax会调用缓存的数据,即使您没有连接到网络,它也会从缓存中获取,这就是为什么它认为这一切都没问题。默认情况下,jQuery Ajax上的缓存为true。
请尝试使用 cache:false
$.ajax({
type: "POST",
url: "SynchroniseCustomers.asmx/synchroniseCustomers",
data: JSON.stringify(customerObj),
contentType: "application/json; charset=utf-8",
dataType: "json",
cache:false,
error: function (xhr, status) {
// If not successfull
},
success: function (msg) {
deleteCustomer(customer.id);
}
});
对于图像调用,最好使用Interval而不是一次又一次地创建内存。
<img id="PingerImg" width="1" height="1" src="/spacer.gif?" onload="synchronise" onerror="fail" />
<script language="javascript" type="text/javascript">
var myImg = document.getElementById("PingerImg");
if (myImg){
window.setInterval(function(){myImg.src = myImg.src.replace(/\?.*$/, '?' + Math.random());}, 60000);
}
</script>
另一个解决方案是从您删除用户的服务器中获取确认代码,并且只有在您阅读该代码后,才能继续删除远程用户。
success: function (msg) {
if(msg.confirm = true)
{
deleteCustomer(customer.id);
}
else
{
alert('Fail to delete user.');
}
}