2009-01-27 27 views
61

Tôi có một trang HTML với một cấu trúc tiêu biểu:Thay thế trang HTML với nội dung lấy thông qua AJAX

<html> 
    <head> 
    <script src="..." ></script> 
    <style>...</style> 
    </head> 
    <body> 
    content 
    </body> 
    <script> 
    var success_callback = function(data) { 
     // REPLACE PAGE CONTENT & STRUCTURE WITH "data" 
    } 
    ajax(url, params, success_callback); 
    </script> 
</html> 

Bạn có nghĩ rằng nó có thể? Tôi đã cố gắng cung cấp cho các thẻ html một id và làm $(id).replace(data); không thành công.

Đừng hỏi tôi tại sao, nhưng đó là những gì tôi cần (Tôi đang làm việc với một trang web "mashup builder" đặc biệt ... đó là một câu chuyện dài).

EDIT: Tôi quên nói rằng kịch bản trong nội dung đã nhận phải được thực hiện, thậm chí kịch bản bên ngoài bao gồm sử dụng <script src="...">.

+3

Tôi muốn được thực sự quan tâm để tìm hiểu thêm về các yêu cầu. Tôi không thể nghĩ ra bất cứ thứ gì yêu cầu như vậy. –

+1

bạn đang sử dụng thư viện js nào? retag để bao gồm nó. – geowa4

Trả lời

7

Bạn có thể thử làm

document.getElementById(id).innerHTML = ajax_response 
11

Dưới đây là làm thế nào để làm điều đó trong Prototype: $(id).update(data)

jQuery: $('#id').replaceWith(data)

Nhưng document.getElementById(id).innerHTML=data nên làm việc quá.

EDIT: Nguyên mẫu và jQuery tự động đánh giá tập lệnh cho bạn.

4

tôi giả sử bạn đang sử dụng jQuery hoặc một cái gì đó tương tự. Nếu bạn đang sử dụng jQuery, sau đó những điều sau đây nên làm việc:

<html> 
<head> 
    <script src="jquery.js" type="text/javascript"></script> 
</head> 
<body> 
    content 
</body> 
<script type="text/javascript"> 
    $("body").load(url); 
</script> 
</html> 
4

thể bạn không chỉ cần cố gắng thay thế các nội dung cơ thể với bộ xử lý document.body?

nếu trang của bạn là thế này:

<html> 
<body> 
blablabla 
<script type="text/javascript"> 
document.body.innerHTML="hi!"; 
</script> 
</body> 
</html> 

Chỉ cần sử dụng document.body để thay thế cho cơ thể.

Điều này phù hợp với tôi. Tất cả nội dung của thẻ BODY được thay thế bằng innerHTML mà bạn chỉ định. Nếu bạn cần thay đổi thẻ html và tất cả các con, bạn nên kiểm tra xem thẻ nào của 'tài liệu'. có khả năng làm như vậy.

Một ví dụ với javascript scripting bên trong nó:

<html> 
<body> 
blablabla 
<script type="text/javascript"> 
var changeme = "<button onClick=\"document.bgColor = \'#000000\'\">click</button>"; 
document.body.innerHTML=changeme; 
</script> 
</body> 

Bằng cách này bạn có thể làm javascript scripting bên trong nội dung mới. Đừng quên để thoát khỏi tất cả các dấu ngoặc kép và duy nhất mặc dù, hoặc nó sẽ không hoạt động. thoát trong javascript có thể được thực hiện bằng cách đi qua mã của bạn và đặt một dấu gạch chéo ngược ở phía trước của tất cả các dấu ngoặc đơn và dấu ngoặc kép.

Hãy nhớ rằng kịch bản lệnh phía máy chủ như php không hoạt động theo cách này. Vì PHP là kịch bản phía máy chủ, nó phải được xử lý trước khi một trang được tải.Javascript là một ngôn ngữ hoạt động trên phía máy khách và do đó không thể kích hoạt việc tái xử lý mã php.

+0

Có, bạn gần như đúng, nhưng các tập lệnh bên ngoài được bao gồm bằng cách sử dụng

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