科尔多瓦没有提出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请求的主要内容,如果未能解决你的问题,请参考以下文章

Cordova Windows 应用程序对 HTTPS 的 ajax 请求因连接失败而失败

科尔多瓦:设备准备好不开火

地理定位不适用于科尔多瓦

Ionic 3 应用程序停止发出网络请求

前端面试题之手写promise

当我提出新请求时,Ajax http 请求将以前的图像加载到轮播中