科尔多瓦没有提出ajax请求

时间:2017-12-26 11:19:18

标签: jquery ajax cordova html-framework-7

我正在使用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 *">

请帮我排序。

1 个答案:

答案 0 :(得分:0)

localhost是&#34;这台计算机&#34;,所以当你从计算机浏览器尝试时它可以工作。 但是模拟器是在您的计算机上运行的虚拟机,因此localhost本身就是模拟器,而不是您的计算机,并且模拟器内部没有服务器,因此ajax调用失败。

模拟器的IP指向&#34; localhost&#34;运行它的计算机,10.0.2.2了解更多相关信息here

因此,您可以使用该IP而不是localhost,但随后它无法在计算机浏览器上运行。此外,它不会在真实设备上工作。

您可以做的最好的事情是使用本机的本地IP,它可以在浏览器,模拟器以及与您的计算机位于同一本地网络上的任何设备上运行。它将类似于192.168.1.xx