2012-07-25 48 views
2

我已经在这个现在三天了,我已经尝试了几乎所有的替代代码和修复程序无济于事。phonegap jQuery .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.INT ERNET”/>到AndroidManifest.xml文件

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

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

注意这不是完整的代码,但它只是坐在包裹在一个标准的标准的PhoneGap deviceready监听事件函数.ready()函数。

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

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

我很喜欢它,如果有人知道问题是什么,因为我已经用尽了建议尝试!

+0

我忘了提及......还将通配符添加到域白名单。 – user1550189 2012-07-25 03:59:59

+0

看起来像这个在太硬的篮子里。也看起来Phonegap未能实现它承诺的内容。耻辱。 :( – user1550189 2012-08-02 00:21:45

+1

找到它,但没有引用它,但在尝试了其他所有内容之后,神奇的行是$ .support.cors = true。 X浏览器请求现在可以在emmulator中和我在phonegap上创建的测试应用中工作最后一个音符......上面的数据类型必须是“json”而不是“jsonp”,至少这是我使用的Weather Underground json feed的情况。 – user1550189 2012-08-09 02:51:09

回答

0

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

添加

$.support.cors = true. 

:)

3

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

试试这个,所以你可以测试任何在本地浏览器或移动设备上无需JSONP

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

工作在你<script></script>面积

1.Follow指令,加

$(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; 
?> 
0

我尝试了很多组合,最后工作的东西是添加以下到我的index.html。关键是确保在加载jquerymobile之前加载它(如果使用的话)。如果在此之后的任何地方加载,它将不起作用。

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