ajax 和 jsonp 的 PhoneGap 问题

Posted

技术标签:

【中文标题】ajax 和 jsonp 的 PhoneGap 问题【英文标题】:PhoneGap Issues with ajax and jsonp 【发布时间】:2014-01-01 01:38:08 【问题描述】:

我想向我的远程服务器发出 AJAX 调用,上传一些参数并下载一些内容。此脚本在浏览器中完美运行,但不适用于 PhoneGap(在 Ripple、chrome 上测试)。

我查看了以下问题和解决方案:

PhoneGap not issuing AJAX (jsonp) request

Issues with jQuery, ajax, and jsonp

Ajax 调用:

$.ajax(
        url: "https://mydomain.com/file.php",
        data: test:"test",    
        type: 'GET',
        dataType: 'jsonp',
        timeout: 5000,
        success: function(data)
            if(data['var'] == 'correct') 
                notifyAlert('correct','Login');
            else
                notifyAlert('incorrect','Login');
                   
        ,          
        error: function(x,e)
            if(x.status==0)
                notifyAlert('You are offline!!\n Please Check Your Network.', 'Error');
            else if(x.status==404)
                notifyAlert('Requested URL not found.', 'Error');
            else if(x.status==500)
                notifyAlert('Internel Server Error.', 'Error');
            else if(e=='parsererror')
                notifyAlert('Error.\nParsing JSON Request failed. '+x.status, 'Error');
            else if(e=='timeout')
                notifyAlert('Request Time out.');
            else 
                notifyAlert('Unknow Error.\n'+x.responseText, 'Error');
                   
        
    );

远程服务器代码:

$record = array('var' => 'correct');
echo $_GET['callback'] . '(' . json_encode($record) . ');';

我的 config.xml 文件有:

<access origin="https://mydomain.com" />

在 Ripple(模拟器)上进行测试时,它给了我状态 0 错误。在我的本地服务器上(通过浏览器)测试相同的脚本时,它会给我正确的 var 警报。

我还测试了一个 json 调用,它在模拟器中完美运行,但是当我将 apk 上传到我的手机时它不起作用。与上述 jsonp 问题的结果相同(状态 0 错误)。

【问题讨论】:

Ripple 模拟器似乎有问题。用eclipse测试了相同的代码,一切正常!它可能是 Ripple 中的 cordova 版本,但在使用 cordova 2.0.0 版本对其进行测试后,它仍然给了我状态 0 错误。我唯一能想到的是我的 config.xml 是错误的,但这并不能解释 json 测试有效而 jsonp 测试无效的事实。 【参考方案1】:

终于找到问题了。这是我的 SSL 证书的问题。我在带有未签名证书的服务器上进行了测试,结果给了我不正确的响应。使用签名证书解决了我所有的问题..

【讨论】:

以上是关于ajax 和 jsonp 的 PhoneGap 问题的主要内容,如果未能解决你的问题,请参考以下文章

ajax 和jsonp 不是一码事

JSON和JSONP,原来ajax引用这个来实现跨域访问的

$.ajax() on phonegap

说说JSON和JSONP

说说JSON和JSONP区别

说说JSON和JSONP区别