使用JSONP的同步AJAX请求

时间:2013-07-23 00:10:08

标签: javascript iphone ajax json jsonp

我的理解是iPhone上的Safari不会从异步线程播放音频(html5)。这是为了限制音频的播放,使其仅仅是对用户交互的响应,例如点击按钮。但是,这对我来说是一个问题。我希望通过单击按钮来播放声音,但是单击按钮后,我需要建立要播放的mp3文件的地址,我目前通过异步AJAX调用来执行此操作,如下所示:

function play() {

    $.ajax({
        url: 'http://apifree.forvo.com/etc/etc', jsonpCallback: "pronounce", jsonp: false, cache: true,           dataType: "jsonp",
        success: function (json) {
            if (json.items.length !== 0) {
                _player.src = json.items[0].mp3path;
                _player.load();
            }
        },
        error: function () {
        }
    });
}

正如你所看到的,我在回调中调用了_player.load()(以及随后的_player.play()),这在iphone上不起作用,但可以在我的电脑上运行。如何使此AJAX调用同步或如何解决此问题?

以下是展示问题的两个小提琴:

Asyncronous _player.load()无法在iPhone上工作但在PC上工作:http://jsfiddle.net/8muHa/27/

Syncronous _player.load()在iPhone和PC上运行:http://jsfiddle.net/8muHa/28/

1 个答案:

答案 0 :(得分:1)

如果必须异步加载文件名,可以预取它吗?如果没有太多这些,只需预取值(例如,当用户导航到您网站的此部分时),然后在点击按钮时调用_player.play()