AJAX从bookmarklet调用asp

时间:2009-01-28 15:12:51

标签: asp.net javascript ajax asp.net-ajax

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

当我将javascript放在静态html页面中时,代码测试完美,但当我尝试从书签中调用它时,代码将挂在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 个答案:

答案 0 :(得分:3)

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

实际上,为什么不使用JSONP

答案 1 :(得分:0)

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

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

埃里克

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