2012-03-26 8 views
5

Oświadczenie: Używam jQuery Mobile 1.1.0 RC1, który nie jest jeszcze stabilny. Mam łącze, które musi opublikować żądanie AJAX i zwrócić odpowiedź JSON, ale po kliknięciu łącza wydaje się, że jQuery Mobile zmienia HREF na hasz (#) w Safari na iOS na iPhone. Nie robi tego podczas testowania w przeglądarkach z iPhone User Agents. Tu jest mój podstawowy HTML i JS, aby pokazać to, co mam:jQuery Mobile 1.1.0 RC1 Modyfikowanie HREF dla AJAX Posty w iOS Safari

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

i 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; 
}); 

Wartość "jsonUrl" staje się "#" (zamiast adresu URL do mojego żądania Ajax) a następnie wartość zmiennej danych zwraca całą stronę, a nie żądany plik JSON. Dziwne jest to, że dzieje się tak tylko w Safari na iPhone'ie. Działa dobrze, a kanał JSON wraca, gdy próbuję witryny jQuery Mobile z innym agentem użytkownika w OSX Safari lub Firefox.

Próbowałem dodać rel = "external" i data-type = "ajax" do linku i to nie naprawia. Używam również jQuery Mobile 1.1.0 RC1, ale nie jestem pewien, czy to jest problem, czy po prostu nie używam poprawnie jQuery Mobile. Nie mam również żadnego innego JS JQuery Mobile w moim kodzie, więc może brakuje mi czegoś, co to naprawi. Doceń pomoc.

+0

Wiem, że mógłbym umieścić Adres URL łącza w atrybucie danych, a następnie wywołaj go za pomocą jQuery, ale musi być lepszy sposób na zrobienie tego. Nie chcę umieszczać atrybutów danych dla każdego linku. – Keith

+0

Próbowano również $ (document) .bind ("mobileinit", function() {$ .mobile.ajaxEnabled = false;}); ale bez powodzenia – Keith

+0

Nie mogłem odtworzyć twojego problemu. http://jsfiddle.net/sDh4k/3/ – r0m4n

Odpowiedz

2

Zamiast:

$this.attr('href') 

użyj:

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

jQuery Komórka 1.1.0RC1 i na (w tym wydany 1.1.0) ustawi href do jakiegokolwiek linku do #, gdy jest to kliknięto i przechowywano atrybut href w atrybucie data-href, aż zakończy się robienie tego, a następnie odłożenie go. Robi to tylko w Safari na iOS.

Mam blogu nieco więcej na ten temat, wraz z linkami do zagadnień pokrewnych GitHub dyskusji i niektórych informacji na temat stosowania tego z Ruby on Rails jQuery UJS tutaj:

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

Powiązane problemy