我正在构建一个AJAX函数,可以在scroll
或click/touchtstart
上调用一些内容添加到我的HTML中。在桌面环境中,无论是点击还是滚动事件,一切都非常适合我。但是它们都不适用于我的Android 2.3.7 HTC EVO或Android 4.1.1上的Nexus 7。
这是我的点击JavaScript事件处理程序:
$('.loadMore').each(function() {
//Set URL and start on the first page
var self = this;
var path2root = ".";
var loc = window.location.origin;
var url = loc + "/process.php";
var subcategoryId = $(this).parent().attr('data-subcategoryId');
var page = 1;
// Build the updated URL
$(self).bind('touchstart', function(e) {
e.preventDefault();
page++;
// AJAX function for processing JSON
$.ajax({
url: url + "?subcategoryId=" + subcategoryId + "&page=" + page,
type: "GET",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function (data) {
var i = 0;
for(i = 0 ; i < data.length; i++) {
var articleId = data[i].articleResult.articleId;
var title = data[i].articleResult.title;
var subhead = data[i].articleResult.subhead;
var image = data[i].articleResult.image;
var response = "<td><div class='articleResult'><a href='" + path2root + "/article/article.php?articleId=" + articleId + "'><img src='" + image + "' width='120'/></a><br><h3><a href='" + path2root + "/article/article.php?articleId=" + articleId + "'>" + title.substring(0,25) + "</a></h3></div></td>";
$("table tr td:nth-last-child(2)").after(response);
};
}
});
});
});
我的滚动功能非常相似,只是我将事件绑定到另一个元素,并滚动:
// Collecting scroll info
$('.overthrow').each(function() {
// SAME VARIABLES
$(this).scroll(function () {
if ($(self).scrollLeft() >= parseInt($(document).width() - 50)) {
if (finished == 1) {
page++;
finished = 0;
// SAME AJAX FUNCTION
};
};
});
});
请记住,这是一个移动优化的网页,而不是原生PhoneGap应用,我使用的是常规jQuery 1.8.0,而不是jQuery Mobile或PhoneGap。
我在Google Code上发现了THIS问题,因为Android 2.3没有非常有效地接收touchstart事件,这使我开始构建on scroll功能。
答案 0 :(得分:1)
根据您Google Code的链接,我们会在e.preventDefault()
事件开始时添加touchstart
,例如:
$(self).bind('touchstart', function(e) { // include e as a reference to the event
e.preventDefault(); // prevents the default behaviour on this element
....
});
以上适用于我的Android 2.X设备;我希望它有所帮助!
答案 1 :(得分:0)
因此,我能够使onAX事件正确地运行AJAX调用。我已经放弃了所有click/touchstart
事件,因为这似乎是Android中的错误。
无论出于何种原因,Android在上传到网络服务器时没有正确读取动态网址:
var loc = window.location.origin;
var url = loc + "/process.php";
所以当我用编译的URL构建我的ajax调用时:
$.ajax({
url: url + "?subcategoryId=" + subcategoryId + "&page=" + page,
window.origin.location
被误解了。相反,我需要对我的process.php
文件的位置进行硬编码:
url: "process.php?subcategoryId=" + subcategoryId + "&page=" + page,
我通过另一篇SO HERE
发现了我的解决方案唯一的问题是我的代码是在iPhone上工作,但在Android上却没有。如果有人知道这背后的原因,那将是很好的信息。