0

我有一个在 Jquery Mobile 框架上运行的 phonegap 应用程序。我有许多组合框(选择),它们会在更改时触发 ajax 查询。该代码在使用本机菜单时工作正常,但是当我切换到 data-native-menu="false" 时,代码无法执行回调,这发生在我的 android 设备上,而不是在模拟器或浏览器上。由于某种原因,我无法让我的设备在调试模式下工作。

代码到达 on change 事件,它到达 $.ajax 中的 beforeSend 函数,但它永远不会完成/错误。我什至尝试添加一个隐藏字段并使用它来触发事件,因此它肯定在正确的页面上,而不是卡在弹出窗口上。

I'll try and make a jsfiddle.

$(document).delegate('#p1', 'pageshow', function () {

        $("#aS").change(function(){
            alert('going to change');
            getAjax('',{},function(){
                alert('got callback');
            });
        });
    });
function getAjax(request,datain,callback){
    $.mobile.showPageLoadingMsg();  
    $.ajax({
        type: "GET",
        url: 'http://open.live.bbc.co.uk/wurfldemi/network.jsonp?callback=?'+request,
        //  async: false,
        data: datain,
        beforeSend: function(x) {
            if(x && x.overrideMimeType) {
                x.overrideMimeType("application/j-son;charset=UTF-8");
            }
        },
        dataType: "jsonp",
        success: function(data){
            $.mobile.hidePageLoadingMsg();  

                callback(data);
        },
        error: function (xhr, ajaxOptions, thrownError) {
            $.mobile.hidePageLoadingMsg();
            alert(xhr.status);
            alert(thrownError);
        }
    });
    return false;
}                        

编辑

http://jsfiddle.net/4KVNc/

重申一下,这不是问题(据我所知),将事件处理程序添加到 select 的 on change 事件中,但无论是请求本身还是回调,都不是问题。

该页面在使用 data-native-menu="true" 时工作正常。我只在小提琴中使用了 '$(document).ready(function(){' 因为我不知道如何让它以任何其他方式工作,我不在真正的应用程序中使用它。

编辑 我已经在 5 台设备上尝试过,它似乎适用于 4.2、4.1、2.5 但不适用于 3。

4

1 回答 1

0

这是一个固定的 jsFiddle:http: //jsfiddle.net/pYYAu/

像这样使用它:

$(document).on('pagebeforeshow', '#p1', function(){   
    $(document).on('change', '#aS', function(event, ui){          
            alert('going to change');
            getAjax('',{},function(){
                alert('got callback');
            });
        });
    });
        .
        .
        .
于 2013-01-30T11:17:26.927 回答