Почему этот код с XMLHttpRequest и document.write не работает? - PullRequest
0 голосов
/ 10 ноября 2010

мой код:

var req = new XMLHttpRequest();
req.open("GET","http://http://surfkid.redio.de/link.php");
req.send(null);
var textout = var.responseText;
document.write(textout);

На документе нет текста.

Что я сделал не так?

Ответы [ 3 ]

5 голосов
/ 11 ноября 2010
req.open("GET","http://http://surfkid.redio.de/link.php");
  1. имеет поддельные дополнительные http://.В любом случае, это не сработает, если текущая веб-страница сама не будет обслуживаться из surfkid.redio.de, из-за единой политики происхождения, поэтому в этом случае вам не нужно указывать имя сервера ввсе.(Если это не так, вам придется читать JSONP.)

  2. Это асинхронный запрос XMLHttpRequest.Ответ на этот запрос не будет доступен сразу;вы должны добавить прослушиватель событий к req.onreadystatechange.

Альтернативой является передача дополнительного аргумента , false в open(), чтобы получить синхронный запрос.Но синхронный XMLHttpRequest обычно считается плохой вещью, поскольку он блокирует пользовательский интерфейс браузера до получения ответа.

var textout = var.responseText;

Вы имели в виду req.

document.write(textout);

document.write как правило, лучше избегатьС одной стороны, он уничтожает текущий документ, если он вызывается после полной загрузки его содержимого, что будет иметь место, если вы используете обратный вызов для асинхронного XMLHttpRequest.

Проще записать responseText в * 1027 элемента* (при условии, что ответ должен быть разметкой; если не создать текстовый узел с заданным текстовым значением).

<div id="redio-link"></div>

<script type="text/javascript">
    // Fix up missing XMLHttpRequest in IE6. You only need to do this once.
    //
    if (!window.XMLHttpRequest && 'ActiveXObject' in window) window.XMLHttpRequest= function() {
        return new ActiveXObject('MSXML2.XMLHttp');
    };

    // Fetch link
    //
    var req= new XMLHttpRequest();
    req.onreadystatechange= function() {
        if (this.readyState===4)
            document.getElementById('redio-link').innerHTML= this.responseText;
    };
    req.open('GET', '/link.php');
    req.send();
</script>
2 голосов
/ 10 ноября 2010

вы не можете получить var.responseText, вы должны получить его из запроса.

Также document.write - это функция, поэтому передайте ей строку из объекта запроса.

document.write(req.responseText)

Но, честно говоря, обратите внимание на использование фреймворка, подобного jquery , что в конечном итоге сэкономит вам время.

$.ajax({ url: "http://http://surfkid.redio.de/link.php", context: document.body, success: function(data){
        document.write(data);
      }});
0 голосов
/ 11 ноября 2010

: исправлен код ... вы не обрабатываете возврат ... также, когда я пытаюсь получить ваш скрипт, я получаю сообщение об ошибке, поэтому я подставил собственную страницу.

    var req = new XMLHttpRequest();
    req.onreadystatechange = function() {
        // in case of network errors this might not give reliable results
        if(this.readyState == 4)
            document.write(this.responseText);
    }

    req.open("GET","http://api.fatherstorm.com/test/redio_result.php");
    req.send();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...