2010-11-26 16 views
1

Dieser Code funktioniert in IE, FF usw. Aber nicht in Safari. Ich verstehe das nicht.Safari jquery a href onClick?

Ich habe einen Link auf meiner Website:

<a href="/show/231" onClick="web('231')">Show</a> 

nun die JS-Datei:

function web(id) { 
    $("#showIMG").load("/web", { 
     id: id 
    }, function() {}); 
} 

"/ web" ist eine PHP-Datei (web.php). In der Web.php ist nur ein PHP-Code, der einen Wert in der Datenbank speichert.

I Safari, die Umleitung (/ show/231) funktioniert. Aber es speichert nicht den Wert in der Datenbank. Das "Laden" funktioniert nicht.

Getestet habe ich es so hier:

function web(id) { 
    $("#showIMG").load("/web", { 
     id: id 
    }, function() {}); 
    alert('clicked'); 
} 

Die Benachrichtigung funktioniert. Aber nicht die Ladung?

Wenn ich ändern Sie den Link zu diesem

<a href="#" onClick="web('231')">Show</a> 

der "Last" funktioniert, aber nicht die Umleitung/Show/231.

+0

Wenn jemand die richtige Antwort gegeben hat, wählen Sie ihn bitte aus, indem Sie auf das Häkchen unter der Stimme klicken. Vielleicht möchten Sie auch über die Registrierung nachdenken. Ich habe deine drei Konten zusammengeführt. – Will

Antwort

1

Wenn Safari mit der Navigation zur nächsten Seite beginnt, wird Ihre AJAX-Anfrage gestoppt.

Um dies zu vermeiden, müssen Sie das Klicken verhindern (indem Sie dem Handler return false; hinzufügen) und dann explizit navigieren, indem Sie location.href im AJAX-Beendigungshandler setzen.

0

Möglicherweise wird durch den Seitenwechsel die Bildauslastung aufgehoben, da das Bild nicht sichtbar ist.

Sie könnten den Web-Metho-Aufruf die Umleitung mit location.href = "" durchführen lassen.

0

Da die .load-Funktion asynchron ist, muss die AJAX-Anfrage möglicherweise nicht ausgeführt werden, bevor der Browser zu "/ show/231" navigiert.

Ihr Beispiel gegeben, würde ich versuchen, .load Ändern Sie die folgenden Parameter .ajax und verwenden:

$.ajax({ 
    async: false, 
    url: '/web', 
    data: 'id=' + id, 
    success: function(){} 
}); 

Die ‚async: false‘ Parameter/Wert macht die Anforderung AJAX synchron statt asynchron ... was sollte dein Problem lösen.