我到处寻找,令人惊讶的是找不到一个好的解决方案!我有以下代码,应该读取文本文件并显示它的内容。但出于某种原因,它不是在阅读。难道我做错了什么?
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);
}
任何好的想法我做错了什么?它只是让我保持零状态。
编辑:我想解释为什么我需要这个代码是个好主意。它基本上是一个小部件,其他人可以放在他们自己的网站上,从我的网站抓取一行文本并显示在他们的网站上。问题是它实际上不能是服务器端,因为我对其他所有使用它的站点都没有控制权。
答案 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可以使用“动态脚本标记跨域”。