2009-01-28 49 views
1

我正在尝试创建一个书签,它将开始对我写入的aspx页面进行AJAX调用。从书签开始对asp进行AJAX调用

当我将JavaScript放在一个静态html页面中时,代码会完美测试,但是当我尝试从bookmarklet中调用它时,代码将仅挂在xmlHttp.open(“GET”,url,true )部分。

的书签的代码基本上是这样(在网络上的几个例子中):

javascript:(function(){ 
    var s, 
    d=document, 
    a=function(o){ d.body.appendChild(o) }; 
    s=d.createElement('script'); 
    s.type='text/javascript'; 
    s.src='http://localhost/squirt/sq.js'; 
    a(s) 
})(); 

这增加sq.js的内容(Ajax调用+其他一些处理)到任何网页浏览器目前在,然后关闭ajax到我的aspx页面。

我使用的ASP 2.0(与VS2008)和IIS 7.到目前为止,我刚刚在我的家庭网络上进行测试。

我认为必须有外部页面的ajax调用的某种权限问题,因为,就像我说的,从静态页面一切正常。这是一个IIS设置,我需要更改以允许调用,或者我正在做一些完全错误的事情?

回答

3

XMLHttpRequest对象受制于相同的来源策略。
这就是为什么您的书签加载的脚本不能使用XHR从服务器获取数据,除非它嵌入在服务器的页面中。
通过动态添加脚本标签添加的脚本可以工作,但您可以告诉 - 您的书签可以从不同来源加载脚本。
所以有你的答案。不要使用XMLHttpRequest对象:以与书签一样的方式动态加载脚本。
这是JSONP是如何工作的(实际上有更多的JSONP一点,但是这是怎么得到周围的SOP)

其实,为什么不使用JSONP

+0

谢谢,它使用JSON和动态脚本!我从来没有听说过JSON,好东西。 – Luke 2009-01-29 14:49:17

0

网页上注入的JavaScript代码,仍然具有相同的权限作为通常存在的代码问题。您无法对其他域进行Ajax调用。所以如果你从example.com调用localhost,它不会起作用。

您可能想要查看从您的服务返回的JSON并使用脚本标记进行JSON调用。

埃里克

0

你使用有相当丑陋的代码,我会建议使用这样的事情,我建:http://sktrdie.org/getScript.js

它的工作原理是这样的:

getScript("http://anotherdomain.com/something", function(data) { 
    alert(data); // the request is complete 
}); 

http://anotherdomain.com/something它必须返回类似这样的东西,因为您使用PHP:

echo $_GET["jsonp"]."('Testing data, you can put anything in here');"; 

请务必阅读有关JSONP