我正在尝试自己编写书签,我已经尝试在SO中阅读一些回复,但没有回答我从脚本中得到的奇怪反应。
我正在从我的书签中进行AJAX调用,所以我做了一个小技巧:
var newScript = document.createElement("script");
newScript.type = "text/javascript";
newScript.src = "http://example.com/urlToMyJS.js";
document.body.appendChild(newScript);
void(0);
urlToMyJS.js 是这样的:
var u = 'http://example.com/scriptToCall.php';
var request = new XMLHttpRequest();
request.open("GET", u, true);
request.onreadystatechange = function() {
var done = 4, ok = 200;
if (request.readyState == done && request.status == ok) {
if (request.responseText) {
alert(request.responseText);
}
}
};
request.send(null);
奇怪的部分是:
alert
会显示responseText
alert
不会显示任何内容(但仍会显示)alert
甚至没有显示......(但我仍然记录了日志......)你知道为什么会这样吗?如果是,您是否知道如何让它始终显示responseText
?
答案 0 :(得分:0)
status
)上测试书签,否则 ok
将不会是example.com
。
当您将另一个站点上的书签运行到example.com
时(这毕竟是拥有书签的重点),它将对example.com
执行跨源XMLHttpRequest。根据您正在使用的浏览器,可能执行请求,但由于同源策略,您将无法读取响应。这是一项重要的安全功能,您无法将用户模拟XMLHttpRequests到其他服务器。
如果要将XMLHttpRequest重新发送回服务器,则必须从服务器上的文档执行此操作,通常是通过让bookmarklet创建指向<iframe>
的{{1}}。
或者,使用JSONP(example.com
包含)来调用<script>
。
答案 1 :(得分:0)
好吧,最后,我使用了另一个技巧:
var newScript = document.createElement("script");
newScript.type = "text/javascript";
newScript.src = "http://example.com/scriptToCall.php";
document.body.appendChild(newScript);
void(0);
这种方式(PHP正在发送javascript标头),不再需要AJAX。在我的情况下这是无稽之谈,因为两个文件都在同一个服务器/文件夹中,1个移动而不是2个!
无论如何,感谢我们将来可能会使用的所有细节!