首先,即使在设备准备好之后,Phonegap + Zepto上的ajax调用也会返回undefined

时间:2012-10-25 13:59:16

标签: ajax cordova jsonp zepto

我正在启动时在我的移动应用程序中进行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)中,结果相同。已经检查过网址是否正确等。

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

由于 史蒂夫

1 个答案:

答案 0 :(得分: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次调用会立即触发另一次,而不是等待第一次响应。我很好奇它在服务器端的样子(见上文)。