options.dataUrl = urlObj.href;
$.mobile.changePage( $page, options );
dataUrl包含带参数的完整网址
http://example.com/#sales?p=page
但上面的代码只在新页面加载后更新了带有哈希的网址...网址更改为
http://example.com/#sales
并不适用?p = page。
这是完整的功能,检查最后几行......
function getSPList( urlObj, options ){
var pageName = urlObj.hash.replace( /.*p=/, "" ),
pageSelector = urlObj.hash.replace( /\?.*$/, "" );
$.ajax({
url:"getSPList.php",
dataType: 'json',
data: {p: pageName},
success:function(result){
if ( result ) {
var $page = $( pageSelector ),
$header = $page.children( ":jqmData(role=header)" ),
$content = $page.children( ":jqmData(role=content)" ),
markup = "<ul data-role='listview' data-filter='true' data-filter-placeholder='Search Salesperson...'>";
for ( var i = 0; i < result.sp.length; i++ ) {
markup += "<li><a href='#addClient?p="+ result.sp[i].id +"' data-transition='slide'>" + result.sp[i].name + "</a></li>";
}
markup += "</ul>";
$content.html( markup );
$page.page();
$content.find( ":jqmData(role=listview)" ).listview();
options.dataUrl = urlObj.href;
options.changeHash = true;
$.mobile.changePage( $page, options );
}
}
});
return
}
答案 0 :(得分:2)
我遇到了同样的问题,这是我在1.3.2版本中发现的:
内部$.mobile.changePage(toPage, options)
options.dataUrl
在存储和使用之前会通过path.convertUrlToDataUrl()
传递。
在path.convertUrlToDataUrl()
内部,包括'#'在内的所有内容以及包括'?'在内的所有内容被剥夺了。
在将网址传递给$.mobile.changePage()
之前,$.mobile.navigate()
内部进一步向内,我看到了这一点:
// rebuilding the hash here since we loose it earlier on
// TODO preserve the originally passed in path
if( !path.isPath( url ) && url.indexOf( "#" ) < 0 ) {
url = "#" + url;
}
所以它似乎是jQm中的一个错误。对于我的应用程序,我将其添加到前面提到的if语句的底部:
var query_index = (settings.dataUrl || '').indexOf('?');
if (query_index > -1) {
url += settings.dataUrl.substring(query_index);
}
这解决了最初的问题,但我不确定潜在的负面影响,或者是否有更好的解决方法。