Ajax не работает - PullRequest
       6

Ajax не работает

0 голосов
/ 29 июня 2010

Приведенный ниже код не отображает все содержимое этой страницы.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document</title>
<script type="text/javascript">

var rootdomain="http://"+window.location.hostname
alert(rootdomain);
function ajaxinclude(url) {
var url=rootdomain+url;
var page_request = false
if (window.XMLHttpRequest) // if Mozilla, Safari etc
page_request = new XMLHttpRequest()
else if (window.ActiveXObject){ // if IE
try {
page_request = new ActiveXObject("Msxml2.XMLHTTP")
} 
catch (e){
try{
page_request = new ActiveXObject("Microsoft.XMLHTTP")
}
catch (e){}
}
}
else
return false
page_request.open('GET', url, false) //get page synchronously 
page_request.send(null)
writecontent(page_request)
}

function writecontent(page_request){
if (window.location.href.indexOf("http")==-1 || 
page_request.status==200)
document.getElementById("write").innerHTML=page_request.responseText;
}

</script>
</head>

<body>
<div id="write">
</div>
<input type="button" value="Submit !" onclick="ajaxinclude('/songcake/index.php');"/>

</body>
</html>

Пожалуйста, помогите

Спасибо.

Ответы [ 3 ]

2 голосов
/ 29 июня 2010

Необходимо добавить замыкание, которое реагирует на завершение процесса загрузки документа.

page_request.onreadystatechange = function() { 
    if(page_request.readystate == 4) { 
        // data handling here
    } 
} 

Как уже указывалось, использование jQuery намного облегчит задачу.

Редактировать: чтобы уточнить, ваш AJAX-вызов проверяет состояние соединения (request.status), но не статус загрузки (request.readystate). Возможно, ваш документ загружен не полностью. Вот справка по API XMLHTTPRequest W3.org: http://www.w3.org/TR/XMLHttpRequest/.

Edit2: Кстати, элемент <iframe> решит вашу проблему с гораздо меньшим количеством кода.

Редактировать 3: Код

function ajaxinclude(url) {
    //...
    page_request.open('GET', url, false) //get page synchronously 
    //<> add onreadystatechange handler
    page_request.onreadystatechange = function() {
        if(page_request.readystate === 4) {
            if(page_request.state === 200) {
               //call function on success
                   writecontent(page_request.responseXML)
            }
        }
    }
    page_request.send(null)
}

Некоторые дополнения:

  1. если вы поместите свой вызов ajax в <HEAD>, вам нужно либо создать элементы dom, к которым вы хотите добавить данные, поскольку они недоступны во время выполнения среды выполнения (что может привести к ошибке dom); или вам нужно добавить обработчик события загрузки на дом.
  2. Синхронные вызовы неправильно реализованы в некоторых браузерах, и это также может привести к ошибкам.
1 голос
/ 29 июня 2010

Почему вы не должны использовать jQuery? Вы можете сделать это просто, как показано ниже ..

$("#write").load("/songcake/index.php");

[Изменено]

Ниже вы можете увидеть завершенный код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document</title>
<script type="text/javascript" src='scripts/jquery.js'></script>
</head>

<body>
<div id="write">
</div>
<input type="button" value="Submit !" 
   onclick="$('#write').load('/songcake/index.php');"/>

</body>
</html>

Скачать jQuery можно здесь: http://jquery.com/ Источник моего ответа вы можете найти здесь: http://api.jquery.com/load/

0 голосов
/ 29 июня 2010

попробуйте использовать FireBug

FireBug покажет вам состояние вашего запроса.Если это 200, и вы видите, что в ответе на запрос (в firebug) неверные данные, то вы должны проверить ваш index.php script

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...