2010-05-17 3 views
0

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

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); 
} 

Любые хорошие идеи, что я делаю неправильно? Он просто держит givimg мне нулевой статус.

EDIT: Я думаю, было бы неплохо объяснить, зачем мне этот код. Это в основном виджет, который другие люди могут размещать на своих собственных веб-сайтах, которые захватывают текст текста с моего сайта и отображают его на своем. Проблема в том, что она действительно не может быть серверной, поскольку у меня есть нулевой контроль над сайтами других, которые используют это.

+0

Самый простой способ сделать эту работу - предоставить данные для удаления веб-сайта через json-p. Погугли это. – Erik

ответ

8

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

+0

Да, это междоменный – Cyprus106

1

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


EDIT

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

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

+0

Я бы сказал, что динамические теги сценариев - лучшее решение, чем iframes ... Google использует их для карт сейчас (они использовали для использования iframes, и они плохо работают в сравнении). По общему признанию, вам, возможно, придется проделать определенную работу, чтобы убедиться, что они не конфликтуют с css и т. Д. На сайте. – rob

+0

Вот почему я рекомендовал iFrames вместо динамического скрипта - он полностью разделяет CSS и избегает любых конфликтов. – EAMann

0

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

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

+0

Это виджет, который другие люди могут использовать на своих сайтах, следовательно, не может использовать серверную часть. В этом файле .txt автоматически загружается новый кусок «мелочей» каждый день. – Cyprus106

+0

Как насчет кода сервера на вашем сервере, который читает фрагмент мелочей в строку, завернутую в функцию javascript, а затем указывая на эту страницу сервера как скрипт. Что-то вроде: Ваш файл PHP будет использовать код сервера для чтения из исходного файла, а затем вывести что-то вроде: функции getTriviaText() { возврата «{эта часть заполняется из серверного кода}»; } К виджету ваш PHP-файл представляет собой простой файл javascript. –

+0

Надеюсь, это имело смысл ... –

1

Этот exmaple содержит код 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/cross-domain-ajax-querying-with-jquery.html

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

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

+0

Предупреждение: ваше предупреждение смешно. Если вы чувствуете, что получаете флэку для предоставления jQuery-решений, попробуйте их обосновать. –

+0

или вы могли бы прочитать все плакаты OP и понять, что он пытается сделать что-то, что нельзя сделать, jQuery или нет. – Erik

+0

Ну ... да. это было сделано, если я нахожусь на локальном хосте. Очевидно, что это не сработает, если я попытаюсь вытащить джив вроде: $ .get («http://www.mysite.com/trivia-proxy.php», функция (данные) {\t Все это "не возможно, «вещь» выглядит примерно так: sigh. – Cyprus106

0

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

Смежные вопросы