Android:触发器AJAX功能不起作用

时间:2012-09-24 16:26:51

标签: android ajax jquery

我正在构建一个AJAX函数,可以在scrollclick/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功能。

2 个答案:

答案 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上却没有。如果有人知道这背后的原因,那将是很好的信息。