2012-03-26 1 views
5

Disclaimer: Sto usando jQuery Mobile 1.1.0 RC1 che non è ancora una versione stabile. Ho un link che deve pubblicare una richiesta AJAX e restituire una risposta JSON ma quando viene cliccato il link sembra che jQuery Mobile modifichi l'HREF in un hash (#) in iOS Safari su iPhone. Non lo fa durante i test nei browser con gli agenti utente iPhone. Ecco il mio HTML di base e JS per mostrare quello che ho:jQuery Mobile 1.1.0 RC1 Modifica HREF per messaggi AJAX in iOS Safari

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

e il 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; 
}); 

Il valore per "jsonUrl" diventa "#" (invece che l'url alla mia richiesta Ajax) e quindi il valore della variabile dati restituisce l'intera pagina e non il feed JSON che voglio. La cosa strana è che questo accade solo su iOS Safari su iPhone. Funziona perfettamente e il feed JSON torna quando provo il sito jQuery Mobile con un altro agente utente in OSX Safari o Firefox.

Ho provato ad aggiungere rel = "external" e data-type = "ajax" al collegamento e non lo aggiusta. Sto anche usando jQuery Mobile 1.1.0 RC1, ma non sono sicuro se questo è il problema o se sto semplicemente usando jQuery Mobile correttamente. Inoltre non ho altri JS specifici per jQuery Mobile nel mio codice, quindi forse mi manca qualcosa che risolverà questo problema. Apprezzo l'aiuto.

+0

So che potrei mettere la URL per il collegamento in un attributo dati e quindi chiamarlo con jQuery, ma ci deve essere un modo migliore per farlo. Non voglio dover inserire gli attributi dei dati per ogni link. – Keith

+0

Ha anche provato $ (document) .bind ("mobileinit", function() {$ .mobile.ajaxEnabled = false;}); ma senza fortuna – Keith

+0

Non sono riuscito a replicare il tuo problema. http://jsfiddle.net/sDh4k/3/ – r0m4n

risposta

2

Invece di:

$this.attr('href') 

Utilizzare questa:

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

jQuery Mobile 1.1.0RC1 e (compresi rilasciato 1.1.0) imposterà il href a qualsiasi link per # quando è cliccato e memorizza l'href in un attributo data-href, fino a quando non è terminato, facendo qualcosa, quindi rimettilo. Lo fa solo su iOS Mobile Safari.

ho bloggato un po 'di più su questo, con i link alle discussioni questioni GitHub correlate e alcune informazioni su come applicare questo con Ruby on Rails jQuery UJS qui:

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