Читать текстовый файл - PullRequest
0 голосов
/ 17 мая 2010

Я искал повсюду и на удивление не могу найти хорошее решение для этого! У меня есть следующий код, который должен читать текстовый файл и отображать его содержимое. Но это не чтение, по некоторым причинам. Я делаю что-то неправильно?

FTR, я не могу использовать PHP для этого. Это должен быть Javascript.

var txtFile = new XMLHttpRequest();
txtFile.open("GET", "http://www.mysite.com/todaysTrivia.txt", true);
txtFile.send(null);
txtFile.onreadystatechange = function() { 
 if (txtFile.readyState == 4) {  // Makes sure the document is ready to parse.
  alert(txtFile.responseText+" - "+txtFile.status);  
     //if (txtFile.status === 200) {  // Makes sure it's found the file.         
        var doc = document.getElementById("Trivia-Widget");
        if (doc) {            
         doc.innerHTML = txtFile.responseText ;   
   }
    //}
 }
 txtFile.send(null);
}

Есть хорошие идеи, что я делаю не так? Это просто дает мне нулевой статус.

РЕДАКТИРОВАТЬ: Я думаю, было бы неплохо объяснить, почему мне нужен этот код. В основном это виджет, который другие люди могут размещать на своих сайтах, который берет строку текста с моего сайта и отображает ее на своих. Проблема в том, что он действительно не может быть на стороне сервера, так как у меня нулевой контроль над сайтами всех остальных, которые используют это.

Ответы [ 5 ]

8 голосов
/ 17 мая 2010

Если это междоменный домен, вы не сможете сделать это с xmlhttprequest из-за той же политики происхождения.

1 голос
/ 17 мая 2010

Этот пример содержит код jQuery.

var text; 
$.get( "proxy.php", function(data) {
   text = data.responseText; 
});

Затем в proxy.php:

<?php
header('Content-type: application/xml');
$daurl = 'http://www.mysite.com/todaysTrivia.txt';
$handle = fopen($daurl, "r");
if ($handle) {
    while (!feof($handle)) {
        $buffer = fgets($handle, 4096);
        echo $buffer;
    }
    fclose($handle);
}

Пример взят здесь: http://jquery -howto.blogspot.com / 2009/04 / междоменное-Ajax-выполнение запроса-с-jquery.html

Как объяснялось ранее, xmlhttp предназначен для запрета междоменных запросов на проблемы безопасности. Но ничто не мешает вам делать это на вашем сервере в PHP.

Другой пример можно найти здесь: http://usejquery.com/posts/9/the-jquery-cross-domain-ajax-guide

1 голос
/ 17 мая 2010

Ваша проблема может заключаться в том, что вы можете запрашивать данные XML только из одного домена через Javascript.Это самая большая проблема с вызовами AJAX - если текстовый файл находится на другом сервере, вы не можете получить его через AJAX.Если он находится на том же сервере, сделайте запрос, используя относительный URL (нет http://).


РЕДАКТИРОВАТЬ

Теперь, когда я знаю, что вы пытаетесь выполнить ... моя рекомендация будетиспользовать iFrame. Соберите систему на своем сервере с использованием серверного кода и разрешите удаленным сайтам встраивать iFrame для отображения результатов на своих сайтах. NetworkedBlogs использует это для отображения функций Facebook на удаленных сайтах. iGoogle широко использует ихразличные приложения и гаджеты. Это довольно проверенный метод.

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

0 голосов
/ 18 мая 2010

Для междоменных областей вам придется использовать динамические теги сценариев для асинхронной выборки данных. Файл todaysTrivia будет представлять собой файл .js, в котором данные хранятся в формате JSON. Google для "динамических тегов сценария кросс-домен", если вы хотите использовать эту технику.

0 голосов
/ 17 мая 2010

Предполагая, что материал AJAX правильный (что я не подтвердил): вы говорите, что не можете использовать PHP для этого - если вы просто хотите, чтобы он использовался для асинхронного использования JavaScript, но в некоторых местах он все еще может использовать серверный код, как насчет использования PHP (или любого серверного языка) для выполнения реальной работы и возврата его на страницу через AJAX / javascript - это решило бы проблему, которую Алекс поднимает.

Так что вместо того, чтобы получать доступ к mysite.com/something.txt из javascript, получите его из SomeAjaxHelper.php (или aspx или чего-либо еще).

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