10/10/2018, 10:55

Lỗi ajax không chạy được trên IE, cần giúp đỡ !

Chào mọi người. Em đang làm một file html để search ontime bằng Ajax mà không hiểu sao nó chạy hoàn toànt tốt trên FF mà với IE (nhà em là 7.0) lại không chịu hiện hoạt động gì hết (thuộc tính onreadychange của XMLHttpRequest chỉ thự thi 1 lần, không thực thi lần thứ hai khi mà open lần 2 ??!).
Đây là code index.html :
PHP Code:
<html>
<
head><title>Ajax testing ...</title>
        <
style type="text/css">
            
#choose
            
{
                
width229px;
            }
            
            
body 
            
{
                
font-family:Verdana;
                
font-size:12px;
            }
            
            
#result 
            
{
                
padding5px;
                
text-align left;
                
font-style:italic;
            }
        </
style>
        
</
head>

<
script src="js/JScript.js" type="text/javascript"></script>
<!-- get ajax core -->

<body>

    Go vao key
<div>
    <br />
    <input type="text" id="choose" value="Something here" />
</div>

<!-- result -->
<div id="result"> <!-- noi dung ket qua --> </div>


</body>
</html> 
Đây là code Jscript.js nằm trong thư mục js/Jscript.js :
PHP Code:
// XMLHttpRequest variable (global)
var xmlHttp null;

// get XMLHttpRequest ->
function getAJAX()
{    
    
    
// take XMLHttpRequest
    
try {
        
// Firefox, Opera, Safari
        
xmlHttp = new XMLHttpRequest();
        
    }
    catch(
e) {
        
// for IE
        
try {
            
// for IE 6+
            
xmlHttp = new ActiveXObject('Msxml2.XMLHTTP');
        }
        catch(
e) {
            
// for IE 5.5+
            
try {
            
xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
            } catch(
e) {alert(e)};
        }
        
    }
    
    
    
// define onreadychange property
    
try {
        
xmlHttp.onreadystatechange = function () {
            
// finish request
            
if(xmlHttp.readyState == 4)
            {
                
// inner HTML result
                
var xmlHttp.responseText;
                
document.getElementById('result').innerHTML t
               
            }
        }
    }
    catch(
e){alert(e)}
    
//end function

// show content result
var 0;
function 
show()
{
    
// check xmlHttp
    
if(!xmlHttp) return;
    
    
// url
    
var url 'core.php?key=' document.getElementById('choose').value;
    
    
// open request
    
xmlHttp.open('GET',url,true);
    
xmlHttp.send(null);
    
    
i++; document.getElementById('result').innerHTML += i;
    
}

// onload
window.onload = function () {
    
getAJAX();
    if(!
xmlHttpalert('The browser does not support Ajax !'); return;

    var 
loop setInterval('show();',1000);
    
    

Còn đây là code core.php nhận đối số là key :
PHP Code:
<?php
// ajax core PHP page

// headers
header('Cache-Control: no-cache, must-revalidate');

//date in past
header('Expire: Mon, 26 Jul 1997 05:00:00 GMT');

// connect to localhost
$conn mysql_connect('localhost','root','root');
mysql_select_db('database');

// string content
$string ';

// get key
$key $_GET***91;'key'***93;;
if(!
$key) exit();
$key addslashes($key);

// query
$query mysql_query("select * from table where `name` like '%$key%' order by `name` asc;");

// fetch value
while($value mysql_fetch_array($query))
{
    
$string .= '- ' $value***91;'name'***93; . '<br />';
}

echo 
$string;
// disable connect
mysql_close($conn);
?>
Có ai biết về Ajax thì chỉ em với !
zoejoe viết 12:58 ngày 10/10/2018
Trong đoạn code trên có 1 biến i em dùng để kiểm tra xem mã setInterval có được thực thi đúng không. Thì nhận thấy hàm chạy tốt, chỉ riêng với IE thì nó chạy như sau :
fairplay viết 13:02 ngày 10/10/2018
Mình thấy Ajax cũng hay, nhưng mình thích dùng iframe hơn, bởi vì nó hầu như thích hợp với mọi Browser và không tốn Resource load thêm Ajax.js

http://www.raovat.net
zoejoe viết 13:03 ngày 10/10/2018
Được gửi bởi fairplay
Mình thấy Ajax cũng hay, nhưng mình thích dùng iframe hơn, bởi vì nó hầu như thích hợp với mọi Browser và không tốn Resource load thêm Ajax.js

http://www.raovat.net
Cảm ơn, nhưng mình đang thực tập Ajax, nên mình mới hỏi chứ bộ Theo như w3schools thì Ajax sẽ làm cho web-app của chúng ta thêm thân thiện với người dùng hơn là đối với các ứng dụng web cổ điển. Nếu bạn thích dùng iframe thì đó là sở thích của riêng bạn thôi, nhưng mình lại thích dùng Ajax vì ai lại viết nhiều iframe quá cho trang web của mình thêm phức tạp và khó nâng cấp cũng như bảo trì
fairplay viết 12:59 ngày 10/10/2018
Dùng 1 iframe thôi bạn ah, bạn có vẻ như là đang SPAM cho Forum của mình, bài nào cũng xía vô vớ vẩn.
tandaica0612 viết 12:59 ngày 10/10/2018
Lỗi của bạn là do IE nó cache lại dữ liệu , lên khi dùng ajax thì khi bạn request lên server thì thực chất thằng IE nó không gửi lên đâu , để khắc phục điều này thì bạn sẽ có 2 cánh khắc phục :
- Với server PHP thì thêm các header để cho client không cache
- Vơi vài mẹo javascript để làm link khác đi khiến cho IE nó không cache giữ liệu
Để biết thêm thì bạn nên đọc bài trong đường link này , không biết diễn đàn dưới này có bắt thành viên đăng ký mới xem được bài không , nếu yêu cầu bạn đăng ký sẽ xem được T_T:
http://www.updatesofts.com/forums/sh...ad.php?t=82535
zoejoe viết 13:09 ngày 10/10/2018
Được gửi bởi tandaica0612
Lỗi của bạn là do IE nó cache lại dữ liệu , lên khi dùng ajax thì khi bạn request lên server thì thực chất thằng IE nó không gửi lên đâu , để khắc phục điều này thì bạn sẽ có 2 cánh khắc phục :
- Với server PHP thì thêm các header để cho client không cache
- Vơi vài mẹo javascript để làm link khác đi khiến cho IE nó không cache giữ liệu
Để biết thêm thì bạn nên đọc bài trong đường link này , không biết diễn đàn dưới này có bắt thành viên đăng ký mới xem được bài không , nếu yêu cầu bạn đăng ký sẽ xem được T_T:
http://www.updatesofts.com/forums/sh...ad.php?t=82535
Cảm ơn bạn, để mình thử coi sao !

Được gửi bởi fairplay
Dùng 1 iframe thôi bạn ah, bạn có vẻ như là đang SPAM cho Forum của mình, bài nào cũng xía vô vớ vẩn.
Mình chỉ bày tỏ quan điểm thôi, chứ có spam hồi nào đâu, bạn nói hơi quá đó ! Rõ ràng là mình không có ác ý với ai hay với diễn đàn, bạn đừng vì vậy mà nói oan cho mình !
zoejoe viết 13:05 ngày 10/10/2018
Được gửi bởi tandaica0612
Lỗi của bạn là do IE nó cache lại dữ liệu , lên khi dùng ajax thì khi bạn request lên server thì thực chất thằng IE nó không gửi lên đâu , để khắc phục điều này thì bạn sẽ có 2 cánh khắc phục :
- Với server PHP thì thêm các header để cho client không cache
- Vơi vài mẹo javascript để làm link khác đi khiến cho IE nó không cache giữ liệu
Để biết thêm thì bạn nên đọc bài trong đường link này , không biết diễn đàn dưới này có bắt thành viên đăng ký mới xem được bài không , nếu yêu cầu bạn đăng ký sẽ xem được T_T:
http://www.updatesofts.com/forums/sh...ad.php?t=82535
Bạn thật là tốt, mình làm ra rồi. Mình đã thử như sau (mỹ mãn) : cứ mỗi lần gọi Ajax thì mình lại tạo lại biến XMLHttpRequest là xong !
dungbeo113 viết 13:11 ngày 10/10/2018
Được gửi bởi zoejoe
Bạn thật là tốt, mình làm ra rồi. Mình đã thử như sau (mỹ mãn) : cứ mỗi lần gọi Ajax thì mình lại tạo lại biến XMLHttpRequest là xong !
Cũng ko cần đối tượng ajax, dùng thủ thuật nhỏ trong javascript như tandaica nói, chỉ cần ở các request gửi về cho server đính kèm theo biến time lấy ngày giờ hiện hành là trình duyệt sẽ ko cache.
zoejoe viết 12:58 ngày 10/10/2018
Thanks. Mình hiện đính kèm thêm method Math.random() cũng có chức năng tuơng tự !
Bài liên quan
0