1

構築しているAJAX関数があり、HTMLを呼び出しscrollたりclick/touchtstart、HTMLにコンテンツを追加したりします。クリックイベントとスクロールイベントの両方で、デスクトップ環境ですべてがうまく機能します。ただし、Android 2.3.7HTCEVOまたはAndroid4.1.1のNexus7ではどちらも機能しません。

これが私のクリック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

            };
          };
      });
    });

これはモバイル向けに最適化されたWebページであり、ネイティブのPhoneGapアプリではないことに注意してください。私は、jQueryMobileやPhoneGapではなく通常のjQuery1.8.0を使用しています。

Android 2.3がタッチスタートイベントをあまり効果的に受信しないという点で、この問題がGoogle Codeで見つかったため、代わりにスクロール機能の構築を開始しまし

4

2 に答える 2

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 デバイスで動作します。それが役立つことを願っています!

于 2012-09-24T17:08:27.017 に答える
0

そのため、スクロールイベントでAJAX呼び出しが適切に機能するようになりました。click/touchstartAndroidでバグがあるように見えるので、イベントをすべて放棄しました。

何らかの理由で、Android は Web サーバーにアップロードされたときに動的 URL を正しく読み取れませんでした。

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投稿を通じて解決策を発見しました

私のコードの唯一の問題は、iPhone では動作していましたが、Android では動作していませんでした。誰かがこの背後にある理由を知っているなら、それは素晴らしい情報です.

于 2012-09-24T21:09:47.547 に答える