[Question] Có ai dùng document.write trong Ajax response chưa? Help me ! |
16/10/2007 10:13:38 (+0700) | #1 | 90841 |
|
namta
Member
|
0 |
|
|
Joined: 11/09/2007 00:58:26
Messages: 5
Offline
|
|
Chào các bác,
Tôi có vấn đề này mãi mà chưa giải quyết được: Khi lập trình Ajax, tôi lấy kết quả trả về từ Ajax gán vào một cái div (nội dung này là HTML và tôi gán vào div qua thuộc tính innerHTML) nằm trong trang, các nội dung nằm ngoài div không thay đổi. Mọi việc có vẻ ngon lành trừ trường hợp trong nội dung HTML trả về có dùng hàm document.write('noidungdocumentwrite') của JavaScript. Khi đó document.write sẽ thay thế toàn bộ nội dung trong trang bằng chuỗi 'noidungdocumentwrite' chứ không phải là hiển thị chuỗi này trong cái div mà tôi cần (
Cái document.write đó nếu là do tôi code ra thì tôi đã xử lý được nhưng khổ nỗi nó nằm trong 1 cái thư viện js to tướng, thư viện này lại đang sử dụng cho rất nhiều module khác trong project -> đành bỏ ý định thay thế document.write
Nếu dùng frame / iframe thì vấn đề này có thể giải quyết được ngay (document.write sẽ write trong frame chứ không ảnh hưởng trang ngoài) nhưng cái tôi cần là không dùng frame.
Rất mong được các cao thủ chỉ giáo. Thanks ! |
|
|
|
|
[Question] Re: Có ai dùng document.write trong Ajax response chưa? Help me ! |
25/10/2007 03:39:40 (+0700) | #2 | 92706 |
|
hoahongtim
Researcher
|
Joined: 15/07/2002 02:59:49
Messages: 156
Location: Underground
Offline
|
|
Bác có thể cho anh em biết bác dùng project đó loại nào không ? Biết đâu anh em trong HVA có ai đó đã từng dùng giống như bác nhưng do chưa hiễu rõ ý bạn nên không giúp được, nếu project open sources thì bác share link cho anh em xem thử !! |
|
|
|
|
[Question] Re: Có ai dùng document.write trong Ajax response chưa? Help me ! |
25/10/2007 10:06:10 (+0700) | #3 | 92776 |
|
namta
Member
|
0 |
|
|
Joined: 11/09/2007 00:58:26
Messages: 5
Offline
|
|
Cái project tôi đang làm không phải open source bạn ạ. Có thể tôi diễn đạt hơi khó hiểu. Thôi để tôi viết 1 cái example cho tiện nhé:
Tôi có 2 file như sau:
File 1: index.html. Nội dung:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
<script language="javascript">
function getAjaxPage(page, method, prs) {
XHRequest = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
XHRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
try {
XHRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
XHRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!XHRequest) {
alert('Cannot create XMLHTTP instance !');
return false;
}
XHRequest.onreadystatechange = function() {
if (XHRequest.readyState == 4) {
if (XHRequest.status == 200) {
result = XHRequest.responseText;
document.getElementById('ajaxcontent').innerHTML = ajaxScript(result);
} else {
alert('There was a problem with the request.');
}
} else {
document.getElementById('ajaxcontent').innerHTML = '';
}
};
XHRequest.open(method, page, true);
XHRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded"
XHRequest.setRequestHeader("Connection", "close"
XHRequest.send(prs);
}
function ajaxScript(str){
try {
var re = /<[\s\/]*script\b[^>]*>([^>]*)<\/script>/g;
var matches = "";
var match1;
while (match1 = re.exec(str)) matches = matches + match1[1];
re = /<[\s\/]*script\b[^>]*>(.*?)<\/script>/g;
while (match1 = re.exec(str)) matches = matches + match1[1];
eval(matches);
return true;
}catch(e) {
alert(e.message);
}
}
</script>
</head>
<body>
<div id="ajaxcontent">Old Content</div>
<input type="button" onClick="getAjaxPage('content.html','post','')" value="Get Content">
</body>
</html>
File 2: content.html. Nội dung:
New Content
<script language="javascript" type="text/javascript">
document.write('abc');
</script>
Chạy bằng index.html, khi bạn bấm vào Button thì nó sẽ write chuỗi "abc" ra một trang mới hoàn toàn chứ không phải cái tôi muốn là hiển thị nội dung "New Content abc" vào cái trong div ajaxcontent. Nếu bạn bỏ cái document.write('abc'); trong file 2 thì bạn sẽ thấy nó thực thi đúng yêu cầu (Trong file 2 này bạn có thể dùng JavaScript thoải mái ngoại trừ document.write).
|
|
|
|
|
[Question] Re: Có ai dùng document.write trong Ajax response chưa? Help me ! |
25/10/2007 15:43:01 (+0700) | #4 | 92857 |
|
nhuhoang
Elite Member
|
0 |
|
|
Joined: 27/06/2007 00:49:10
Messages: 111
Location: /dev/null
Offline
|
|
Theo tôi thấy thì không có cách nào cả, vì khi bạn muốn lấy nội dung của document.write() thì bạn phải lấy nội dung đã được thể hiện trên trình duyệt qua việc thực thi các script. Ngay cả các server-side script cũng không thể làm điều này hộ trình duyệt được được.
Tốt nhất là bạn nên thay document.write() bằng một biện pháp nào đó nào đó cục bộ hơn, như innerText, innerHTML,value,... |
|
|
Users currently in here |
1 Anonymous
|
|
Powered by JForum - Extended by HVAOnline
hvaonline.net | hvaforum.net | hvazone.net | hvanews.net | vnhacker.org
1999 - 2013 ©
v2012|0504|218|
|
|