PhoneGap 应用程序 - JSONP 请求发生在浏览器中,但不在设备上(Android)

Posted

技术标签:

【中文标题】PhoneGap 应用程序 - JSONP 请求发生在浏览器中,但不在设备上(Android)【英文标题】:PhoneGap app - JSONP Request happening in browser, but not on device (Android) 【发布时间】:2013-01-17 20:33:06 【问题描述】:

我正在尝试在我的 PhoneGap 应用程序中进行 JSONP 调用。它在我的桌面浏览器中运行良好,但在设备中却不行。我认为这可能是 jQuery Mobile 的问题,所以我什至尝试禁用它,但没有帮助。

安卓版本:3.0

这是我的代码:

<link rel="stylesheet"  href="css/themes/default/jquery.mobile-1.1.0.css" />
<script src="js/jquery.js"></script>
<script src="js/jquery.mobile-1.1.0.js"></script>
<script src="cordova-2.1.0.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
    function cancelclicked() 
        window.location.href="index.html";
    

     function jsonp_call()
        
            // The call request here
        
        function parseRequest(response)
        
            // Parse the response here
        
</script>

<div data-role="page" class="type-interior">

<div data-role="header" data-theme="b">
    <h1>Login</h1>
</div>
<div data-role="content">
    <div class="content-primary">
            <div data-role="fieldcontain">
             <label for="name">Username:</label>
             <input type="text" id="uname" />
            </div>

            <div data-role="fieldcontain">
             <label for="name">Password:</label>
             <input type="password" name="name" id="pass"  />
            </div>
            <div data-role="fieldcontain">
                <label for="name" id="invalidlogin"></label>
            </div>
            <div class="ui-body ui-body-b">
            <fieldset class="ui-grid-a">
                    <button type="submit" onclick="return jsonp_call()" data-theme="e" rel="external">Login</button>
                    <!--</form>-->
                    <button type="submit" onclick="cancelclicked()" data-theme="d">Cancel</button>
            </fieldset>
            </div>
    </div>
</div>

我在这里缺少什么?它在浏览器上运行良好,所以我很确定 JSONP 代码是正确的。它在模拟器和设备上也失败了。

【问题讨论】:

【参考方案1】:

对我来说,访问源设置已经设置好了。 但我还是遇到了问题。

原来是缺少几个 HTML 结束标记。 (在我的情况下关闭 A HREF 标签) 当我只更改此设置时,它又可以在 android 上运行。 Chome 自动修复了缺失的结束标签。

很头疼,因为我在浏览器中测试时没有遇到任何问题,我认为这与 jsonp 实现或安全/签名问题有关。

【讨论】:

我知道这是一个微不足道的问题,但 Chrome 通过自动添加缺少的结束标签对开发人员弊大于利。【参考方案2】:

您是否将域名添加到 Cordova 配置文件中?它在 res/xml/config.xml 下

<access origin="bla.bla.domain.com" />

【讨论】:

是的,成功了。我之前没有包含它,但它工作正常。只有当我使用没有访问源的 JQM 时它才会失败。很奇怪,但确实如此。

以上是关于PhoneGap 应用程序 - JSONP 请求发生在浏览器中,但不在设备上(Android)的主要内容,如果未能解决你的问题,请参考以下文章

JSONP:需要回调吗?

ajax 和 jsonp 的 PhoneGap 问题

使用 jQuery 在 Android 2.2.2 上的浏览​​器未获取 JSONP

带有 AngularJS 的 Windows Phone 8.1 上的 Phonegap 无法从我的 API 中检索 JSONP

请求数据

闲谈jsonp