首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iPhone不一致地执行javascript

iPhone不一致地执行javascript
EN

Stack Overflow用户
提问于 2012-11-30 02:31:46
回答 2查看 60关注 0票数 1

我有以下链接:

代码语言:javascript
复制
<a href='external-url' class='track' data-type='event' data-category='category'>
   Link
</a>

单击链接时,将执行以下函数:

代码语言:javascript
复制
$('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中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-30 02:44:10

track()可能是一个异步操作。

在其他浏览器中,它可能只是足够快(只是运气好),它在执行window.location之前完成了所有的任务。但这样的行为很奇怪。

但是,在iPhone上,track()可能执行得太慢,以至于执行window.location已经取消了操作,因为页面退出到另一个页面。这是异步操作的适当行为。它在所有浏览器上的行为也应该是一样的。

不要使用这种顺序的代码,而是尝试使用回调。输入一个函数,一旦track完成了它的工作,它就会被执行:

代码语言:javascript
复制
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  = ...;
});
票数 3
EN

Stack Overflow用户

发布于 2012-11-30 02:43:53

你有种族问题。你必须希望这个请求能提出。

当页面退出时,它会关闭打开的请求。我很惊讶它能在桌面浏览器上工作,他们应该有同样的问题。把它放在一个很远的服务器上,在一个缓慢的网络,我打赌他们不会成功。

在过去,使用while循环很容易使其工作,但chrome/firefox却扼杀了它。

如果它是一个外部站点,打开它进入一个新窗口。把你的网站打开。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13638195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档