【问题标题】:First ajax call on Phonegap + Zepto returns undefined even after device ready即使在设备准备好之后,Phonegap + Zepto 上的第一个 ajax 调用也会返回 undefined
【发布时间】:2012-10-15 17:40:05
【问题描述】:

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

<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) 中,结果相同。已经检查过网址是否正确等。

有人见过这样的吗?

谢谢 史蒂夫

【问题讨论】:

    标签: ajax cordova jsonp zepto


    【解决方案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 次调用将在另一个之后立即触发,而不是等待第一个响应。我很好奇它在服务器端是什么样子的(见上文)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多