我有以下链接:
<a href='external-url' class='track' data-type='event' data-category='category'>
Link
</a>单击链接时,将执行以下函数:
$('a.track').on('click', function(e){
e.preventDefault();
var type = $(this).data("type");
var category = $(this).data("category");
track(type, category);
window.location = $(this).attr("href");
});track函数通过ajax发布数据,并将其存储在数据库中。在桌面浏览器上,这是完全工作的。在Android上,这也是完全可行的。
在iPhone上,我看到它不能工作大约10次(链接带我到外部站点而不添加到数据库),然后它将神奇地开始工作大约10次!有人能识别出这个问题可能是什么吗,或者在我的代码中,或者在我忽略的iOS中?
发布于 2012-11-30 02:44:10
track()可能是一个异步操作。
在其他浏览器中,它可能只是足够快(只是运气好),它在执行window.location之前完成了所有的任务。但这样的行为很奇怪。
但是,在iPhone上,track()可能执行得太慢,以至于执行window.location已经取消了操作,因为页面退出到另一个页面。这是异步操作的适当行为。它在所有浏览器上的行为也应该是一样的。
不要使用这种顺序的代码,而是尝试使用回调。输入一个函数,一旦track完成了它的工作,它就会被执行:
function track(type,category,callback){
//track operations up here and your ajax setup
//execute callback when ajax operation replies
if(ajaxStatus === 200){
callback();
}
}
//using track, we pass in parameters and the callback
//which when executed, runs the code inside it
track(type,category,function(){
window.location = ...;
});发布于 2012-11-30 02:43:53
你有种族问题。你必须希望这个请求能提出。
当页面退出时,它会关闭打开的请求。我很惊讶它能在桌面浏览器上工作,他们应该有同样的问题。把它放在一个很远的服务器上,在一个缓慢的网络,我打赌他们不会成功。
在过去,使用while循环很容易使其工作,但chrome/firefox却扼杀了它。
如果它是一个外部站点,打开它进入一个新窗口。把你的网站打开。
https://stackoverflow.com/questions/13638195
复制相似问题