科尔多瓦没有提出ajax请求
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了科尔多瓦没有提出ajax请求相关的知识,希望对你有一定的参考价值。
我正在使用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 *">
请帮我整理一下。
localhost
是“这台电脑”,所以当你从电脑浏览器尝试时,它可以工作。但是模拟器是在您的计算机上运行的虚拟机,因此localhost本身就是模拟器,而不是您的计算机,并且模拟器内部没有服务器,因此ajax调用失败。
模拟器有一个IP指向运行它的计算机的“本地主机”,这是10.0.2.2
了解更多关于它here
因此,您可以使用该IP而不是localhost,但它将无法在计算机浏览器上运行。此外,它不适用于真实设备。
您可以做的最好的事情是使用您的机器的本地IP,它可以在浏览器,模拟器以及与您的计算机位于同一本地网络上的任何设备上运行。这将是像192.168.1.xx
以上是关于科尔多瓦没有提出ajax请求的主要内容,如果未能解决你的问题,请参考以下文章