1

我在启动时在我的移动应用程序中进行 jsonp 调用以连接到我的服务器。我正在使用 Phonegap 2.1 和 Zepto 1.0-rc1。在我的 html 页面的底部,我准备好 DOM 上的初始化内容。

<script type="text/javascript">
if (!$) {$ = Zepto};
$(init);
document.addEventListener('deviceready', Perksea.deviceReady);
</script>

...

function init() {
    var router = new Backbone.Router();
    ...
}
function deviceReady() {
    isConnected();
    isConnected();
}
function isConnected() {
    $.ajaxJSONP({
        url: 'http://localhost/isconnected',
        success: function(response) {
            console.log('response is ' + response);
        }
    });
}

第一个 JSONP 调用将打印“响应未定义”,但第二个 JSONP 调用有效。我什至尝试将 JSONP 调用放入 setTimeout(isConnected, 5000) 中,结果相同。已经检查过网址是否正确等。

有没有人见过这样的东西?

谢谢史蒂夫

4

1 回答 1

1

由于您在第一次调用时进入“成功”回调函数(未定义响应),您确定您的服务器正确响应第一次调用吗?听起来它正在返回 200 响应,但没有第一次调用的数据。

您可以尝试添加一个“错误”回调,看看它是否也提供了任何有用的东西

$.ajaxJSONP({
    url: 'http://localhost/isconnected',
    success: function(response) {
        console.log('response is ' + response);
    }
    error: function(response) {
        console.log('error is ' + response);
    }
});

最后,因为 AJAX 是异步的,所以您对isConnected()的 2 次调用将一个接一个地触发,而不是等待第一个响应。我很好奇它在服务器端的样子(见上文)。

于 2012-11-04T02:55:32.317 回答