2009-06-10 70 views
20

Trước hết, đây không phải là cách lý tưởng để thiết lập trang, tuy nhiên cần phân phối tập lệnh dưới dạng 1 tệp.Lỗi Firefox 'không tìm thấy phần tử'

Tôi có tập lệnh php ở đầu tài liệu xhtml khác với javascript và trong một số điều kiện nhất định, hãy sử dụng XHR để gửi chuỗi truy vấn đến chính trang đó. Các php ở đầu sau đó kích hoạt, và lưu trữ các nội dung thông qua như là một phiên, và sau đó giết chết chính nó (exit()). XHR không đồng bộ và không bao giờ được kiểm tra xem nó có trả về nội dung hay không.

Tuy nhiên trong Firefox 3, bảng điều khiển lỗi đưa ra lỗi no element found mỗi khi yêu cầu XHR được gửi. Ngoài ra, nếu tôi sử dụng lối ra như exit('Done'), Firefox sẽ ném lỗi cú pháp của (Xong) như thể chèn nó vào DOM hiển thị. Điều này dường như không xảy ra trong Opera.

Có cách nào tốt hơn để lưu trữ phiên từ một trang xhtml đã được tạo không? Rõ ràng tôi có thể XHR đến một trang khác, nhưng tôi muốn giữ nó trên một kịch bản. Firefox có coi các yêu cầu XHR là bản cập nhật cho DOM không? Tôi không biết tại sao nó gửi lỗi này.


Cập nhật Như tôi đã nói, firefox chỉ thows lỗi khi yêu cầu XHR được thực hiện. Trang này là XHTML hợp lệ và hoạt động hoàn hảo, không có lỗi trừ khi yêu cầu XHR được tạo cho chính trang đó.

Tôi đã tự hỏi tại sao nó đã gửi lỗi bởi vì nó thực sự không trả lại bất cứ điều gì.

Đây là đoạn mã javascript tạo yêu cầu ajax từ một đối tượng. Nó tạo ra một đối tượng XHR, không có chức năng gọi lại và đăng thông tin. Nó hoạt động đúng khi không tham chiếu cùng một trang.

var saveState = { saveContent: function(updateActiveMenu) { 
    var sendState = new ajaxObject(gV.url); 
    if (!updateActiveMenu) { 
     var storageContainer = document.getElementById("StorageContainer").innerHTML; 
     var menu = document.getElementById("Nav").innerHTML; 
     sendState.update("Containerstring="+urlencode(storageContainer)+"&Nav="+urlencode(menu)+"&Active="+gV.activeMenuItem, 'POST', true); } }, } 

Và php thực hiện điều này

if (isset($_REQUEST['Containerstring']) && isset($_REQUEST['Nav']) && isset($_REQUEST['Active'])) { 
    $_SESSION['Containerarray'] = (saveContainer(regulateEscapes(urldecode($_REQUEST['Containerstring'])))); 
    $_SESSION['Navarray'] = (saveNav(regulateEscapes(urldecode($_REQUEST['Nav'])))); 
    $_SESSION['Active'] = $_REQUEST['Active']; 
    exit('Done'); 
} 

Tôi cũng biết tôi không nên sử dụng innerHTML nhưng đó là một câu chuyện


Lỗi này là này

Error: no element found 
Source File: http://localhost/ajax.php?1244648094055 
Line: 1 

Lưu ý rằng lỗi, trong khi trên trang trang hp tôi đang sử dụng, tham chiếu chuỗi truy vấn không bao giờ được gọi.

+0

có một số mâu thuẫn trong những gì bạn mô tả. nếu XHR không bao giờ sử dụng giá trị trả về (mà là 'Xong') sau đó nó không thể chèn nó vào một DOM, bây giờ có thể nó? – SilentGhost

+0

thậm chí tốt hơn nên đăng một số ví dụ nhỏ về mã của bạn. – SilentGhost

+0

Tại sao không đặt các phần liên quan của nguồn của trang lên? –

Trả lời

25

Firefox được mong đợi để có được một cái gì đó nó có thể phân tích như XML trở lại, và ném một lỗi phân tích cú pháp XML khi nó nhận được một phản hồi trống.

Trước PHP cuộc gọi của bạn "exit()", sử dụng

header('Content-Type: text/plain'); 

và Firefox sẽ không cố gắng để phân tích phản ứng như XML, và không nên có lỗi.

+0

Không sao, tôi đã sử dụng tiêu đề" HTTP/1.0 200 "và giả định điều này sẽ làm tương tự, tôi chắc chắn nhầm lẫn;) Điều này làm việc, cảm ơn rất nhiều. –

+0

Trong trường hợp của tôi, tôi đã gửi một phản hồi trống từ máy chủ và jQuery đoán mong đợi xml và cố gắng phân tích nó. Tôi chỉ đơn giản là trả về 'thành công' và nó đã khắc phục vấn đề. Vì vậy, bạn trả lời đã giúp tôi ra quá. Cảm ơn – sidonaldson

-2

Bạn nên có php của bạn trở lại một phản ứng HTTP hợp lệ, vì Firefox sẽ cố gắng đọc nó ngay cả khi bạn không làm bất cứ điều gì với nó. Vì vậy, hãy trả lại ít nhất một tiêu đề hợp lệ

header("HTTP/1.0 200"); 
exit(); 
+1

Giải pháp này không hoạt động, tuy nhiên tiêu đề 'Loại nội dung' đã làm. –

Các vấn đề liên quan