我正在使用Framework7制作Cordova应用程序。 我想对我的localhost上的文件进行ajax调用。 当我在我的网络浏览器上点击localhost的ajax URL时,我得到的结果完全符合我的要求。 但是当我尝试通过Android Studio模拟器中的Cordova应用程序进行ajax调用时,它失败了。
我想这与Cordova的config.xml
文件有关。
以下是我的完整confix.xml内容: -
<?xml version='1.0' encoding='utf-8'?>
<widget id="io.cordova.hellocordova" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<feature name="Whitelist">
<param name="android-package" value="org.apache.cordova.whitelist.WhitelistPlugin" />
<param name="onload" value="true" />
</feature>
<name>HelloCordova</name>
<description>
A sample Apache Cordova application that responds to the deviceready event.
</description>
<author email="dev@cordova.apache.org" href="http://cordova.io">
Apache Cordova Team
</author>
<content src="index.html" />
<access origin="*" />
<access origin="http://*" />
<access origin="https://*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<allow-intent href="market:*" />
<preference name="loglevel" value="DEBUG" />
</widget>
我的Ajax脚本: -
var ajax_url = "http://10.0.2.2/";
jQuery(document).on('pageInit', function (e) {
jQuery.ajax({
url:ajax_url+'api.php/getMenu',
type:'post',
success:function(response)
{
response = jQuery.parseJSON(response);
response = response.payload;
var html = '<ul>';
jQuery(response).each(function(index,value){
htmlpage_name = value.title.replace(/\s/g, '').toLowerCase();
html+='<li>';
if (!/^(f|ht)tps?:\/\//i.test(value.link)) {
html+='<a href="'+htmlpage_name+'.html" class="item-link"><div class="item-content"> <div class="item-inner"> <div class="item-title">'+value.title+'</div></div></div></a>';
}
else
{
html+='<a href="'+value.link+'.html" class="item-link"><div class="item-content"> <div class="item-inner"> <div class="item-title">'+value.title+'</div></div></div></a>';
}
html+='</li>';
});
html+='<li><a href="barcodescan.html" class="item-link"><div class="item-content"> <div class="item-inner"> <div class="item-title">Barcode Scan</div></div></div></li>';
html+='</ul>';
jQuery(".home-page-menu").html(html); }
}); });
我尝试的事情: -
1)在confix.xml
文件中添加了访问源。
<access origin="*" />
<access origin="http://*" />
<access origin="https://*" />
2)在我的php文件中添加了标题,我正在进行ajax调用。
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Methods: POST,GET,OPTIONS");
3)在Content-Security-Policy
中添加了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 *">
请帮我排序。
答案 0 :(得分:0)
localhost
是&#34;这台计算机&#34;,所以当你从计算机浏览器尝试时它可以工作。
但是模拟器是在您的计算机上运行的虚拟机,因此localhost本身就是模拟器,而不是您的计算机,并且模拟器内部没有服务器,因此ajax调用失败。
模拟器的IP指向&#34; localhost&#34;运行它的计算机,10.0.2.2
了解更多相关信息here
因此,您可以使用该IP而不是localhost,但随后它无法在计算机浏览器上运行。此外,它不会在真实设备上工作。
您可以做的最好的事情是使用本机的本地IP,它可以在浏览器,模拟器以及与您的计算机位于同一本地网络上的任何设备上运行。它将类似于192.168.1.xx