阅读文本文件

时间:2010-05-17 19:09:55

标签: javascript ajax text

我到处寻找,令人惊讶的是找不到一个好的解决方案!我有以下代码,应该读取文本文件并显示它的内容。但出于某种原因,它不是在阅读。难道我做错了什么?

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 个答案:

答案 0 :(得分:8)

如果这是跨域的,由于原始策略相同,您将无法使用xmlhttprequest执行此操作。

答案 1 :(得分:1)

您的问题可能在于您只能通过Javascript从同一域请求XML数据。这是AJAX调用的最大问题 - 如果文本文件在另一台服务器上,则无法通过AJAX获取。如果它位于同一台服务器上,请使用相对URL(无http://)发出请求。


修改

既然我知道你要完成什么......我的建议是使用iFrame。使用服务器端代码在服务器上构建系统,并允许远程站点嵌入iFrame以在自己的站点上显示输出。 NetworkedBlogs使用它来显示远程站点上的Facebook功能。 iGoogle广泛使用它们的各种应用和小工具。这是一种相当经得起考验的方法。

使用iFrame的优势在于您仍然可以控制窗口小部件的大部分内容,但是您可以让最终用户控制样式(只需让您的iFrame应用程序通过查询变量接受参数来更改颜色,位置和大小)。

答案 2 :(得分: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

答案 3 :(得分:0)

假设AJAX的东西是正确的(我还没有确认):你说你不能使用PHP - 如果你只是意味着你需要它来异步使用javascript但仍然可以在某些地方使用服务器代码,如何使用PHP(或任何服务器端语言)来完成实际工作并通过AJAX / javascript将其返回到页面 - 这将解决Alex带来的问题。

所以不要从javascript中获取mysite.com/something.txt,而是从SomeAjaxHelper.php(或aspx或其他)获取它。

答案 4 :(得分:0)

对于跨域,您必须使用动态脚本标记异步获取数据。 todaysTrivia文件将是一个将数据存储为JSON的.js文件。如果您想使用此技术,Google可以使用“动态脚本标记跨域”。