Заполнение страниц с использованием данных ajax в jquery-mobile не всегда работает - PullRequest
0 голосов
/ 15 января 2019

Я использую переменную url в своих ссылках для передачи уникального идентификатора, который запускается через ajax и вводится с использованием .html(). Смотрите код ниже

Я добавил время ожидания, добавил empty() в div перед заполнением,

ССЫЛКА НА СТРАНИЦУ:

<a href="member.html?id=' + member.id + '" data-role="none" data-transition="slide">

СОЗДАНИЕ СТРАНИЦЫ:

$(document).on( "pageshow", "#member-page", function(event) {
   .....
   var request = $.ajax({
      url: serviceURL + 'member_profile',
      method: "GET",
      data: { id : id },
      dataType: "html"
   });
   request.done(function( data ) {
      ...
      alert(html);
      $('#member-profile').hide().empty().html(html).fadeIn();
    });


    request.fail(function( jqXHR, textStatus, errorThrown ) {
       alert( "Request failed Line 752: " + textStatus + " - " + jqXHR.responseText);
       $.mobile.loading( "hide" );
    });
});

Иногда это работает, а иногда нет. Даже если alert(html) всегда показывает данные.

Есть ли лучший способ передать идентификатор и визуализировать страницу, например, используя pagebeforecreate

1 Ответ

0 голосов
/ 16 января 2019

Вы пропустили, чтобы показать нам самую важную часть вашего кода. Было бы намного проще проанализировать ваш код, если бы вы также включили раздел $ .ajax.

Я бы предположил два возможных решения, и я думаю, что оба эти решения переплетены в вашем случае.

  • Процесс Ajax асинхронный по своей природе, что означает, что остальная часть кода не будет ждать его завершения. Это может быть причиной, почему вы иногда видите свой новый контент, а иногда нет. Вероятно, это связано со скоростью вызова AJAX.

Вы пытались сделать это так:

$.ajax({
  url: "YOUR ENDPOINT"
}).done(function(html) {
  $('#member-profile').hide().empty().html(html).fadeIn();
});

Таким образом, контент будет очищен / заполнен только после его фактического получения.

  • Вторая возможность - это само событие pagehow. В зависимости от скорости, jQuery Mobile может иметь или не иметь времени для предварительного отображения нового HTML-контента и его показа. Если это так, лучше использовать событие pagebeforecreate или pagecreate. Или pageinit, если вы используете старые события jQuery Mobile.
...