api在浏览器中工作,但不在android phonegap中

时间:2015-11-16 08:00:05

标签: android cordova phonegap-build

我正在创建一个货币转换器,我从互联网获取当前货币汇率,它在浏览器上正确获取值,但不在Android手机上工作。  我在互联网上搜索了很多,但我找不到合适的解决方案。

请帮忙

<html>
<head>

<script src="../js/jquery.min.js"></script>
<script src="../js/jquery.mobile.min.js"></script>
<script src="../js/main.js"></script>
<script src="../cordova.js"></script>
<link rel="stylesheet" type="text/css" href="../css/main.css">
<link rel="stylesheet" href="../css/jquery.mobile-1.4.5.min.css" />

<script>

var audv;
var inrv;
var jpyv;
var rubv;
var gbpv;

$.ajax({

    url: 'https://currency-api.appspot.com/api/USD/AUD.jsonp',
    dataType: "jsonp",
    data: {amount: '1.00'},
    success: function(response) {

        if (response.success) {

            audv = parseFloat(response.rate).toFixed(2);

        }
    }
});

$.ajax({

    url: 'https://currency-api.appspot.com/api/USD/INR.jsonp',
    dataType: "jsonp",
    data: {amount: '1.00'},
    success: function(response) {

        if (response.success) {

            inrv = parseFloat(response.rate).toFixed(2);

        } 
        else {
        alert('error response : '+response);
        }


    }
});

$.ajax({

    url: 'https://currency-api.appspot.com/api/USD/JPY.jsonp',
    dataType: "jsonp",
    data: {amount: '1.00'},
    success: function(response) {

        if (response.success) {

            jpyv = parseFloat(response.rate).toFixed(2);

        }
    }
});

$.ajax({

    url: 'https://currency-api.appspot.com/api/USD/RUB.jsonp',
    dataType: "jsonp",
    data: {amount: '1.00'},
    success: function(response) {

        if (response.success) {

            rubv = parseFloat(response.rate).toFixed(2);

        }
    }
});

$.ajax({

    url: 'https://currency-api.appspot.com/api/USD/GBP.jsonp',
    dataType: "jsonp",
    data: {amount: '1.00'},
    success: function(response) {

        if (response.success) {

            gbpv = parseFloat(response.rate).toFixed(2);

        }
    }
});

function setValuesInTextFileds(){
document.getElementById('aud').value= audv;
document.getElementById('inr').value= inrv;
document.getElementById('jpy').value= jpyv;
document.getElementById('rub').value= rubv;
document.getElementById('gbp').value= gbpv;
}


$.mobile.loading().hide();

</script>
</head>
<body>

<div id='MasterContainer'>
<div id='HeaderDiv'>
<div style='float: left;'>
<a href='#' data-rel="back"><img src='../res/icon/Arrows-Back-icon.png' border='0' style='margin-top: 9px;' /></a></div><br/>
<label style='font-size: 20; margin:0 auto;  display:table; vertical-align:middle;'>Show Rates</label>
</div><!-- HeaderDiv ends -->
<table border='0' class='tableclass'>
<col width='30%'>
<col width='30%'>
<col width='30%'>
<tr><th>Country Name</th><th>Currency Name</th><th>Value against USD</th></tr>
<tr><td align='center'>Australia</td><td align='center'>AUD</td><td><input type='number' name='aud' id='aud' class='enjoy-input textfieldclass' style='background: #E8E8E8; padding-left: 5px;' disabled></td></tr>
<tr><td align='center'>India</td><td align='center'>INR</td><td><input type='number' name='inr' id='inr' class='enjoy-input textfieldclass' style='background: #E8E8E8; padding-left: 5px;' disabled></td></tr>
<tr><td align='center'>Japan</td><td align='center'>JPY</td><td><input type='number' name='jpy' id='jpy' class='enjoy-input textfieldclass' style='background: #E8E8E8; padding-left: 5px;' disabled></td></tr>
<tr><td align='center'>Russia</td><td align='center'>RUB</td><td><input type='number' name='rub' id='rub' class='enjoy-input textfieldclass' style='background: #E8E8E8; padding-left: 5px;' disabled></td></tr>
<tr><td align='center'>UK</td><td align='center'>GBP</td><td><input type='number' name='gbp' id='gbp' class='enjoy-input textfieldclass' style='background: #E8E8E8; padding-left: 5px;' disabled></td></tr>
</table>
<table border='0' class='tableclass'>
<col width='30%'>
<col width='30%'>
<tr><td align='center'>
<div class='button' onclick='setValuesInTextFileds()' style='padding: 10px 20px;'>Get Online</div>
</td><td align='center'>
<div class='button' onclick='setLocalValues()' style='padding: 10px 20px;'>Get Saved</div>
</td></tr>
</table>
</div><!-- MasterContainer div ends-->
</body>
</html>

2 个答案:

答案 0 :(得分:2)

要让您的移动设备与其他网站通话,您必须将其列入白名单。如果您不这样做,那么您的移动应用无法与外界沟通。 (在浏览器上进行测试时不需要白名单,但在移动设备上测试时总是需要白名单。)

将您必须拥有的网站列入白名单:

  1. 修改您的config.xml以包含第<access origin="*" />
  2. 通过phonegap build或本地作为cordova插件安装白名单插件。发现了cordova插件here
  3. 有关此问题的更多信息,请here

    这是Phonegap开发人员常犯的错误。 This篇文章列出了您可能制作的更多文章。

答案 1 :(得分:0)

您需要在index.html的头部调整内容安全策略元标记,如下所示:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; connect-src https://currency-api.appspot.com">

注意我添加了一个&#34; connect-src&#34;子句。

然后,这将允许访问您尝试查询汇率数据的服务器。

可以找到讨论此内容的博文,该文章也使用了货币转换示例{。{3}}。