2010-09-12 18 views
5

Tôi đã chức năng JS sau kích hoạt bởi một nút:JavaScript: ajaxSubmit lỗi

function uploadPicture() { 
    $("form#pictureUpload").ajaxSubmit({ 
     data: $("form#pictureform").serialize(), 
     type: 'post', 
     url: '?action=loadpicture', 
     success: function(response) { 
      $('#div-pictures').html(response); 
     } 
    }); 

}

này làm việc hoàn toàn tốt đẹp trong vài tháng. Nhưng nó đã ngừng hoạt động ngày hôm nay trong Firefox, Safari, Chrome và Opera - mặc dù nó vẫn hoạt động chính xác trong Internet Explorer.

Safari mang lại cho tôi những lỗi bí ẩn sau:

Failed to load resource: cancelled  ?action=loadpicture 

Chrome kết quả đầu ra gần như giống nhau (không có : cancelled). Opera và Firefox không có lỗi gì cả. Thông tin bổ sung duy nhất là các lỗi ở trên xảy ra sau khi quá trình tải tệp lên hoàn tất và mặc dù máy chủ tạo ra đầu ra HTML làm phản hồi bị trình duyệt bỏ qua.

Vui lòng cho tôi biết nếu bạn có bất kỳ ý tưởng nào về cách khắc phục sự cố này. Tôi đã chạy trong vòng tròn trong nhiều giờ mà thậm chí không đến gần với một giải pháp - Tôi chỉ đơn giản là không thấy lỗi trong mã cũng như trong các tệp nhật ký. Cảm ơn nhiều!

+0

Tôi không biết câu trả lời, nhưng một vài ý tưởng cần điều tra: -Tôi không nghĩ rằng nó chỉ định đúng? Parm = value khi thực hiện yêu cầu POST. Thông thường, khi bạn thực hiện yêu cầu GET, tất cả các thông số bạn cung cấp sẽ được nối vào URL theo cách này; khi bạn POST, các giá trị được gửi như dữ liệu biểu mẫu. Thử sử dụng đầu vào bị ẩn. Tôi có thể nhầm lẫn về điều này, có lẽ nó được cho phép mặc dù nó không sử dụng bình thường. -Có vẻ như bạn đang đăng lại cùng một trang nơi mã này được xác định, không chắc chắn liệu hành vi đó có đúng không? -Bạn có đang sử dụng phiên bản jQuery khác với trước đây không? – RMorrisey

+0

Không có phiên bản jQuery nào giống nhau. Sự khác biệt duy nhất mà tôi biết là bản cập nhật nhỏ của Apache và mod-php. – MrG

+0

Có phải '? Action = loadpicture' hoạt động như trước đây không? Bạn đã thử gọi url này một cách đồng bộ chưa? – dmitko

Trả lời

5

Nó đã cho tôi một thời gian, nhưng tôi cuối cùng tìm ra. Một trong những quản trị viên của chúng tôi thêm vào cấu hình Apache:

nào gây ra một vấn đề trên trình duyệt nhất định vì việc sử dụng iframe mô tả ở http://jquery.malsup.com/form/#file-upload. Sau khi thay đổi nó vào tất cả mọi thứ sau đây được hoạt động trở lại (không có thay đổi mã!):

Header append X-FRAME-OPTIONS "SAMEORIGIN" 

Dù sao, các thông báo lỗi trên Safari & Chrome là khó hiểu. Các hành vi lạ mà không có bất kỳ thông báo lỗi trên trình duyệt khác thậm chí còn tồi tệ hơn.

+1

Hãy chắc chắn để chấp nhận điều này khi bạn có thể, nên cứu người khác một nhức đầu sau này :) –

0

Hmmm bạn không nên sử dụng các chuỗi truy vấn trong URL vì khi bạn gọi serialize đi của nó để có được lần lượt các dữ liệu vào một truy vấn xâu thành chuỗi thử này:

$("form#pictureUpload").ajaxSubmit({ 
     data: 'action=loadpicture&'+$("form#pictureform").formSerialize(), 
     type: 'post', 
     success: function(response) { 
      $('#div-pictures').html(response); 
     } 
    });