Asp.net 从bookmarklet对asp的AJAX调用

Asp.net 从bookmarklet对asp的AJAX调用,asp.net,javascript,ajax,asp.net-ajax,Asp.net,Javascript,Ajax,Asp.net Ajax,我正在尝试创建一个bookmarklet,它将启动对我编写的aspx页面的AJAX调用 当我将javascript放在一个静态html页面中时,代码得到了完美的测试,但是当我尝试从bookmarklet取消它时,代码将挂在xmlHttp.open(“GET”,url,true)部分 bookmarklet的代码基本上是这样的(可以在web上的几个示例中找到): 这会将sq.js(ajax调用+一些其他处理)的内容添加到浏览器当前所在的任何页面,然后将ajax调用到我的aspx页面 我正在使用AS

我正在尝试创建一个bookmarklet,它将启动对我编写的aspx页面的AJAX调用

当我将javascript放在一个静态html页面中时,代码得到了完美的测试,但是当我尝试从bookmarklet取消它时,代码将挂在xmlHttp.open(“GET”,url,true)部分

bookmarklet的代码基本上是这样的(可以在web上的几个示例中找到):

这会将sq.js(ajax调用+一些其他处理)的内容添加到浏览器当前所在的任何页面,然后将ajax调用到我的aspx页面

我正在使用ASP 2.0(带VS2008)和IIS 7。到目前为止,我只是在我的家庭网络上测试它


我假设来自外部页面的ajax调用一定存在某种权限问题,因为正如我所说,在静态页面上一切都可以正常工作。这是我需要更改以允许调用的IIS设置,还是我做了一些完全错误的事情?

XMLHttpRequest对象受同一源策略约束。
这就是为什么bookmarklet加载的脚本不能使用XHR从服务器获取数据,除非它嵌入到服务器的页面中。
不过,通过动态添加脚本标记添加的脚本可以正常工作,正如您所知,您的bookmarklet可以从其他来源加载脚本。
这就是你的答案。不要使用XMLHttpRequest对象:以与bookmarklet相同的方式动态加载脚本。
这就是JSONP的工作原理(实际上JSONP有更多的内容,但这就是它绕过SOP的方式)


事实上,为什么不在页面上使用注入JavaScript代码,仍然与通常的代码有相同的权限问题。不能对其他域进行Ajax调用。因此,如果您从example.com调用localhost,它将不起作用

您可能希望查看从服务返回的JSON,并使用脚本标记进行JSON调用


Eric

您在那里使用的代码相当难看,我建议您使用我构建的类似代码:

它的工作原理如下:

getScript("http://anotherdomain.com/something", function(data) {
    alert(data); // the request is complete
});
如果您使用的是PHP,则必须返回如下内容:

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

请务必阅读。

谢谢,我们已经将其与JSON和动态脚本结合使用了!我以前从未听说过JSON,很好的东西。很高兴它对你有用。为了避免混淆:JSON!=JSONP。JSON是一种数据交换格式,JSONP指的是从不同域加载填充/前缀JSON数据的一种方式。:)
echo $_GET["jsonp"]."('Testing data, you can put anything in here');";