PhoneGap的jQuery的阿贾克斯跨域请求在浏览器中运行,在Android SDK中失败(ph

2019-06-26 13:01发布

我一直在现在这三天,我已经差不多每一件替换码和修复努力都无济于事。

下面的代码,从沼泽标准的jQuery例子采取:

    $.ajax({
            url: "http://api.wunderground.com/api/4213a68e7f20c998/geolookup/conditions/forecast/q/Australia/Noarlunga.json",
            dataType: "jsonp",
            success: function(parsed_json) {
               alert("YEP!");
               var loc = parsed_json['response'];
               var weather = "Location: " + parsed_json.location.city + "<br />";
               weather += "Wind: " + parsed_json.current_observation.wind_dir + " ";
               weather += parsed_json.current_observation.wind_mph + "-" + parsed_json.current_observation.wind_gust_mph + " knts";
               $("#info").html(weather);
           }    
    });

和这里的一些配置有很多人建议(这什么也没做)

    $( document ).bind( "mobileinit", function() {
        // Make your jQuery Mobile framework configuration changes here!
        $.mobile.allowCrossDomainPages = true;
        $.mobile.ajaxEnabled = true;
        $.mobile.pushStateEnabled = false;
        $.mobile.allowCrossDomainPages = true;  
    });

另外,我有:

  • 附加<使用的许可机器人:名称=“android.permission.INTERNET对” />到AndroidManifest.xml文件

  • 在对同一个目标浏览器测试的JSON请求URL(正常工作)

  • 测试在Firefox / Chrome浏览器的页面(正常工作)
  • 试图在我的银河S2应用在3G(UI一切工作正常,但Ajax请求仍然失败)

注意这不是完整的代码,但它只是坐在包裹在一个标准。就绪()函数标准的PhoneGap deviceready侦听器事件的功能。

事实上这是我的手机上的失败和SDK似乎表明的PhoneGap / Eclipse的问题,而不是连接/权限问题。

我试图部署到Android 2.3 AVD,使用Android SDK。 我还没有尝试部署到Android 4 AVD呢。

如果有人知道是什么问题,因为我的建议,尽量跑出去我喜欢它!

Answer 1:

如果前提是,你可以在服务器上修改PHP代码..

试试这个,所以你可以测试无论是在本地的浏览器或移动WITHOUT JSONP

jQueryMobile网站,这很好地解释了如何使它与PhoneGap的工作的1.Follow指令(http://jquerymobile.com/test/docs/pages/phonegap.html)

在你<script></script>区域中,添加

$(document).on("mobileinit", function(){
  //apply overrides here
  $.mobile.allowCrossDomainPages = true;
  $.support.cors = true;

});

你的Ajax可能是

$.ajax({
           type: "GET",
           url: "http://xx.xx.xx.xx/xxx/xx.php"
        }).done(function( msg ) {
           alert(msg);
           //refresh the content
           $( '.ui-content' ).load( 'xx/xx.html', function ()  {$(this).trigger('create') });
        });

2.您的PHP是这样的:

 <?php
    header('Access-Control-Allow-Origin: *');//for local browser test
    $test='[{"name":"aa","address":"aa"}, {"name":"bb","address":"bb"}]';
    echo $test;
 ?>


Answer 2:

$( document ).bind( "mobileinit", function()

$.support.cors = true. 

:)



Answer 3:

我试过很多的组合,并且终于摸索被添加以下到我的index.html的事情。 最关键的事情是确保你加载jquerymobile之前,它的加载(如果您正在使用的)。 如果以后任何位置加载它不会工作。

<script type="text/javascript">
$(document).bind("mobileinit", function() {
    $.support.cors = true;
    $.mobile.allowCrossDomainPages = true;
});
</script>


文章来源: phonegap jQuery .ajax cross domain requests work in browser, fail in Android SDK