jQuery Mobile 1.1.0 RC1 Модификация HREF для сообщений AJAX в iOS Safari - PullRequest
5 голосов
/ 27 марта 2012

Отказ от ответственности: я использую jQuery Mobile 1.1.0 RC1, который еще не является стабильной версией. У меня есть ссылка, которая должна опубликовать запрос AJAX и вернуть ответ JSON, но при щелчке по ссылке кажется, что jQuery Mobile меняет HREF на хэш (#) в iOS Safari на iPhone. Это не происходит при тестировании в браузерах с агентами пользователя iPhone. Вот мой основной HTML и JS, чтобы показать, что у меня есть:

<a href="/link/to/ajaxpost/">Send Ajax Request</a>

и JS

$('#tab a').on('click', function(e){
        var $this = $(this);
        var jsonUrl = $this.attr("href");
        alert(jsonUrl);

        $.mobile.showPageLoadingMsg();

        $.ajax({
            type: "POST",
            url: jsonUrl,
            success: function(data) {
                $.mobile.hidePageLoadingMsg();
                alert(data);
            }
        });
        return false; 
});

Значение для "jsonUrl" становится "#" (вместо URL-адреса моего запроса ajax), а затем значение переменной данных возвращает всю страницу, а не фид JSON, который я хочу. Странно то, что это происходит только в iOS Safari на iPhone. Он работает нормально, и фид JSON возвращается, когда я пробую сайт jQuery Mobile с другим пользовательским агентом в OSX Safari или Firefox.

Я попытался добавить rel = "external" и data-type = "ajax" к ссылке, и это не исправило это. Я также использую jQuery Mobile 1.1.0 RC1, но я не уверен, что это проблема, или я просто не правильно использую jQuery Mobile. У меня также нет другого JS для JQuery Mobile в моем коде, так что, возможно, я что-то упустил, чтобы это исправить. Ценю помощь.

1 Ответ

2 голосов
/ 29 июня 2012

Вместо:

$this.attr('href')

Используйте это:

$this.data('href') || $this.attr('href')

jQuery Mobile 1.1.0RC1 и вкл. (Включая выпуск 1.1.0) установит для href любую ссылку на #, когда на него нажали, и сохраните href в атрибуте data-href, пока он не закончил делать свое дело, затем верните его обратно. Он делает это только в iOS Mobile Safari.

Я немного подробнее написал об этом в блоге со ссылками на обсуждения проблем, связанных с github, и некоторой информацией о применении этого с Ruby on Rails jQuery UJSздесь:

http://scottwb.com/blog/2012/06/29/jquery-mobile-breaks-your-hrefs-on-ios-mobile-safari/

...