ajax跨域请求在浏览器中有效,在Android SDK中失败



我已经研究了三天了,我几乎尝试了每一段替代代码和修复程序,但都无济于事。

以下是代码,取自沼泽标准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:name="android.permission.INTERNET"/>到AndroidManifest.xml文件

  • 在浏览器中测试了同一目标上的json请求URL(运行良好)

  • 在FireFox/Chrome中测试页面(运行良好)
  • 在我的Galaxy s2 over 3G上尝试了该应用程序(UI一切正常,但ajax请求仍然失败)

请注意,这不是完整的代码,但它只是位于标准的phonegap设备就绪侦听器事件函数中,该函数封装在标准的.ready()函数中。

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

我正在尝试使用Android SDK部署到Android 2.3 AVD。我还没有尝试部署到安卓4 AVD。

如果有人知道问题出在哪里,我会很高兴的,因为我已经没有什么建议可以尝试了!

如果前提条件是您可以在服务器上修改php代码。。

试试这个,这样你就可以在没有JSONP 的情况下在本地浏览器或移动设备上进行测试

1.遵循jQueryMobile网站的说明,该网站很好地解释了如何使用phonegap(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;
 ?>

在中

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

添加

$.support.cors = true. 

:)

我尝试了很多组合,最终成功的是将以下内容添加到我的index.html中。关键是在加载jquerymobile之前确保它已加载(如果你正在使用它)。如果在那之后在任何地方加载,它都不会工作。

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

相关内容

  • 没有找到相关文章

最新更新