Android + JQM + jsonp不能始终如一地工作

时间:2012-07-10 09:41:46

标签: android jquery ajax cordova

我正在使用JQM + PhoneGap在混合Android应用程序上工作 我正在用AJAX做一个JSONP请求

它适用于所有Chrome PC浏览器,在连接WiFi时,我的Android应用程序也能很好地工作, 但是当将网络连接更改为3G时,AJAX请求没有响应。

我发现@BruceHill相关帖子写了以下内容: “移动运营商在将其发送到手机之前进行了内容修改,这种修改打破了jQuery” Jquery mobile page not loading correctly on Netherlands 3G connections

虽然我不是住在荷兰,但我尝试通过将所有JS文件放在远程服务器上并通过CDN调用它来做他的建议,但不幸的是它没有帮助。

我很乐意在这个方面得到一些帮助......

这是我的AJAX请求:

$.mobile.allowCrossDomainPages = true;

$('#expertsListPage').live('pageshow', function (event) {
   $.mobile.showPageLoadingMsg(); 
    getExpertsList();
});


var catId;
var catName
function getExpertsList() {


    $('#expertsList li').remove();
    catId = getUrlVars()["id"];
    catName = getUrlVars()["cat"]  ;

    $('h1').text( unescape(catName) );

    var url = 'http://apis.mydomain.com/mydata.svc/jsonp' 


    $.ajax({
         cache: true,
         type: 'GET',
         url: url,
         dataType: 'jsonp' ,
         jsonp: 'callback',
         success:api_do
    });


}

var expertss;
function api_do(obj) {

    $('#expertsList li').remove();

    expertss = obj.experts;

    $.each(expertss, function (index, expert) {

        $('#expertsList').append('<li><a  href="ExpertDetails.html?id=' + expert.id + '&catid=' + catId +'&catName=' + catName + '">' +
                    '<img style="width:160px;height:160px;" src="' + expert.thumbnail + '"/>' +
                    '<h4>' + expert.name + '</h4>' +
                    '<p>' + expert.description + '</p>' +
                    '</a></li>');

    });

    $('#expertsList').listview('refresh');

    $.mobile.hidePageLoadingMsg();
}


function getUrlVars() {
    var varsExperts = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for (var i = 0; i < hashes.length; i++) {
        hash = hashes[i].split('=');
        varsExperts.push(hash[0]);
        varsExperts[hash[0]] = hash[1];
    }
    return varsExperts;
}

1 个答案:

答案 0 :(得分:0)

尝试将此代码添加到您的javascript中,可能会有帮助。

$( document ).on( "mobileinit", function() {
                 // Make your jQuery Mobile framework configuration changes here!
    $.support.cors = true;
    $.mobile.allowCrossDomainPages = true;
});