it-swarm.com.ru

Почта $ .ajax работает в Chrome, но не в Firefox

Хорошо, я буду коротким. У меня есть этот скрипт, который помещает значения в базу данных. Он отлично работает в Chrome, Safari, но не может заставить его работать в Firefox или IE. Кажется, что данные даже не публикуются в файл .php и ajax вообще не запускается. Кто-нибудь, пожалуйста?

Это мой скрипт 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;
});
});

Это содержимое моего 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());
11
Marko Kavaš

Вы не определили event как параметр обработчика событий, следовательно, в

event.preventDefault();

браузер пытается найти event в глобальной области видимости. Chrome предоставляет объект события в глобальной области видимости (следовательно, ошибки нет), а Firefox - нет (следовательно, ошибки).

Я бы предложил добавить параметр event в обработчик событий:

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

Есть еще одно отличие: если вы не определите параметр event, event будет ссылаться на объект события native в Chrome, который отличается от объекта события, который jQuery передает обработчику .

Чтобы узнать больше об обработке событий с помощью jQuery, я рекомендую просмотреть эти статьи .

24
Felix Kling

Асинхронный вызов может не работать в FF, если он инициирован при отправке формы. Вы можете добавить async: false к вашему вызову ajax, и он будет работать. Это либо тот факт, либо тот факт, что у вас есть междоменный вызов, который вы должны будете исправить через CORS.

7
Tayyab Ali

В Firefox отсутствует асинхронный вызов $ajax, это было исправлено в Firefox v49.0.2 и выше.

$(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;
});
});

Приведенный выше код будет работать при обновлении до Firefox v49.0.2 или выше.

1
Sarthak Srivastava