2012-09-24 83 views
1

我有一個AJAX功能,我正在建設一個電話scrollclick/touchtstart,以便將一些內容附加到我的HTML。在桌面環境中,一切都非常適合我,無論是點擊還是滾動事件。但是,他們都沒有在我的Android 2.3.7 HTC EVO或Android 4.1.1上的Nexus 7上工作。Android:觸發器AJAX功能不起作用

這裏是我的點擊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

您是否打算在滾動期間或在單擊/觸摸$('。loadMore')元素時自動填充內容? – dSquared

+0

那麼,我最初是通過觸摸/點擊來構建它,但是當我的Android設備無法工作時,我開始構建一個滾動功能。我將這兩個腳本都包含在內,因爲它們都可以在Desktop Chrome/Ffox等上完美運行,但不會在我的任何Android瀏覽器上運行。 – robabby

+0

看看我的答案;它應該解決您的問題...如果您打算只綁定到點擊/觸摸事件,請記住刪除滾動事件。 – dSquared

回答

0

所以我能夠讓AJAX調用正常運行,以便在滾動事件中使用。我已經放棄了click/touchstart事件,因爲這似乎是Android中的bug。

var loc = window.location.origin; 
var url = loc + "/process.php"; 

所以當我建立我的Ajax調用與編譯網址:

無論出於何種原因,Android的不正確時,上傳到網絡服務器讀取動態URL

$.ajax({ 
    url: url + "?subcategoryId=" + subcategoryId + "&page=" + page, 

window.origin.location被誤解了。相反,我需要硬編碼我process.php文件的位置:

url: "process.php?subcategoryId=" + subcategoryId + "&page=" + page, 

我發現通過我的另外一個解決方案,以便發佈HERE

,唯一的缺點是我的代碼是工作在iPhone上,而不是在Android上。如果有人知道背後的原因,那將是非常棒的信息。

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設備上的上述作品;我希望它有幫助!

+0

感謝您的迴應!我已經用你的建議更新了我的代碼,並且在我的2.3.7設備或我的4.1.1 Nexus 7中仍然沒有收到任何東西。在Chrome,Ffox,Dolphin瀏覽器和原生Android瀏覽器中測試過... – robabby

+0

嗯。 ..你可以鏈接到你的測試頁面或JSFiddle.net與您的問題?如果沒有看到底層代碼,很難診斷。 – dSquared

+0

我知道......給我一點,我會編譯一個jsfiddle頁面 – robabby