我有一个在Jquery Mobile框架上运行的phonegap应用程序。我有许多组合框(选择),它们在更改时触发 ajax 查询。使用本机菜单时,代码工作正常,但是当我切换到数据本机菜单="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/
重申一下,这不是问题(据我所知),将事件处理程序添加到选择的 on change 事件,但请求它是自身或回调。
使用数据原生菜单="true"时,该页面工作正常。我只在小提琴中使用了'$(document).ready(function(){',因为我不知道如何让它以任何其他方式工作,我不在真正的应用程序中使用它。
编辑我已经在 5 台设备上尝试过这个,它似乎适用于 4.2、4.1、2.5,但不适用于 3。
这是一个固定的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');
});
});
});
.
.
.