2013-08-16 22 views
9

OK, tôi sẽ viết tắt. Tôi có kịch bản này được đặt giá trị trong cơ sở dữ liệu. Nó hoạt động hoàn hảo trong Chrome, Safari nhưng không thể làm việc trong Firefox hoặc IE. Dường như dữ liệu thậm chí không được đăng lên tệp .php và ajax không bắt đầu. Bất cứ ai, xin vui lòng?

Đây là kịch bản jquery của tôi:

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

Đây là nội dung trong file php của tôi:

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

Trả lời

17

Bạn đã không xác định event như tham số của các xử lý sự kiện, do đó trong

event.preventDefault(); 

trình duyệt cố tìm kiếm event trong phạm vi toàn cầu. Chrome xảy ra để cung cấp đối tượng sự kiện trong phạm vi toàn cầu (do đó không có lỗi) nhưng Firefox không (do đó có lỗi).

tôi muốn đề nghị thêm các tham số event để xử lý sự kiện:

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

Có một sự khác biệt thêm: Nếu bạn không xác định các tham số event, event sẽ tham khảo các nguồn gốc sự kiện trong Chrome, khác với the event object which jQuery passes to the handler.

Để tìm hiểu thêm về xử lý sự kiện với jQuery, tôi khuyên bạn nên xem qua số these articles.

+0

Đây là câu trả lời đúng nhất. – FloatingRock

+0

Tôi gặp vấn đề tương tự. Nó hoạt động trong localhost mà không sử dụng 'event.preventDefault()' nhưng trong máy chủ aws, nó không hoạt động. Bất kỳ ý tưởng tại sao? –

+0

P.S: nó hoạt động bằng cách thêm vào đó. Tự hỏi làm thế nào nó làm việc trong localhost mà không thêm 'e.preventDefault()' –

7

Cuộc gọi không đồng bộ có thể không hoạt động trong FF nếu bạn kích hoạt khi gửi biểu mẫu. Bạn có thể thêm async: false vào cuộc gọi ajax của bạn và nó sẽ hoạt động. Đó là một trong hai điều đó hoặc thực tế là bạn có cuộc gọi tên miền chéo mà bạn sẽ phải khắc phục thông qua CORS.

+0

không hoạt động ... – Dani

1

Firefox thiếu số $ajax cuộc gọi không đồng bộ đã được sửa trong Firefox v49.0.2 trở lên.

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

Mã trên sẽ hoạt động khi bạn nâng cấp lên Firefox v49.0.2 trở lên.