2013-08-16 20 views
9

Ok, sarò breve. Ho questo script che sta mettendo i valori nel database. Funziona perfettamente in Chrome, Safari, ma non può farlo funzionare in Firefox o IE. Sembra che i dati non vengano nemmeno pubblicati nel file .php e ajax non si avvia affatto. Qualcuno, per favore?

Questo è il mio script jquery:

$(document).ready(function(){ 
$("#dodaj").click(function(){ 
    event.preventDefault(); 
    var kategorija = $("#kategorija option:selected").val(); 
    var si = $("#si").val(); 
    var hu = $("#hu").val(); 
    var de = $("#de").val(); 
    var an = $("#an").val(); 
    var hr = $("#hr").val(); 

$.ajax({ 
    type: "POST", 
    url: "dodaj_v_bazo.php", 
    data: {"kategorija": kategorija, "si": si, "hu": hu, "de": de, "an": an, "hr": hr}, 
    success: function(data){ 
     alert("Jed uspešno dodana."+data); 
    }, 
}); 
return false; 
}); 
}); 

Questo è il contenuto nel mio file php:

$kategorija = $_POST['kategorija']; 
$si = $_POST['si']; 
$hu = $_POST['hu']; 
$de = $_POST['de']; 
$an = $_POST['an']; 
$hr = $_POST['hr']; 

$dodaj_v_bazo = "INSERT INTO jedi (kategorija, si, hu, de, an ,hr) VALUES ('$kategorija', '$si', '$hu', '$de', '$an', '$hr')"; 
mysql_query($dodaj_v_bazo) or die(mysql_error()); 

risposta

17

Non hai definito event come parametro del gestore eventi, quindi in

il browser tenta di cercare event nell'ambito globale. Chrome capita di fornire l'oggetto evento in ambito globale (quindi nessun errore), ma Firefox non lo fa (quindi un errore).

Io suggerirei di aggiungere il parametro event al gestore di eventi:

$("#dodaj").click(function(event){ 
    event.preventDefault(); 
    // ... 
}); 

C'è una differenza ulteriore: se non si definisce il parametro event, event farà riferimento al nativo evento oggetto in Chrome, che è diverso da the event object which jQuery passes to the handler.

Per ulteriori informazioni sulla gestione degli eventi con jQuery, si consiglia di passare attraverso these articles.

+0

Questa è la risposta più corretta. – FloatingRock

+0

Ho lo stesso problema. Funziona in localhost senza usare 'event.preventDefault()' ma nel server aws non funziona. Qualche idea del perché? –

+0

P.S: ha funzionato aggiungendo quello. Mi chiedo come funziona in localhost senza aggiungere 'e.preventDefault()' –

7

La chiamata asincrona potrebbe non funzionare in FF se è stata attivata per l'invio del modulo. Puoi aggiungere async: false alla tua chiamata ajax e funzionerà. È questo o il fatto che hai una chiamata interdominio che dovrai correggere tramite CORS.

+0

non funziona ... – Dani

1

Firefox mancante della chiamata asincrona $ajax è stato risolto in Firefox v49.0.2 e versioni successive.

$(document).ready(function(){ 
$("#dodaj").click(function(){ 
    event.preventDefault(); 
    var kategorija = $("#kategorija option:selected").val(); 
    var si = $("#si").val(); 
    var hu = $("#hu").val(); 
    var de = $("#de").val(); 
    var an = $("#an").val(); 
    var hr = $("#hr").val(); 

$.ajax({ 
    type: "POST", 
    url: "dodaj_v_bazo.php", 
    data: {"kategorija": kategorija, "si": si, "hu": hu, "de": de, "an": an, "hr": hr}, 
    success: function(data){ 
     alert("Jed uspešno dodana."+data); 
    }, 
}); 
return false; 
}); 
}); 

Il codice sopra funzionerà quando si esegue l'aggiornamento a Firefox v49.0.2 o successivo.

Problemi correlati