【问题标题】:AJAX call to asp from bookmarklet从书签到 asp 的 AJAX 调用
【发布时间】:2010-10-04 00:44:56
【问题描述】:

我正在尝试创建一个书签,它将启动对我编写的 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 设置,还是我做错了什么?

【问题讨论】:

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


    【解决方案1】:

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

    其实,为什么不直接使用JSONP

    【讨论】:

    • 谢谢,可以使用 JSON 和动态脚本!我以前从未听说过 JSON,好东西。
    • 很高兴它对你有用。只是为了避免混淆:JSON!= JSONP。 JSON 是一种数据交换格式,JSONP 是指一种从不同域加载 Padded/Prefixed JSON 数据的方式。 :)
    【解决方案2】:

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

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

    埃里克

    【讨论】:

      【解决方案3】:

      您在那里使用的代码相当丑陋,我建议使用我构建的类似这样的代码: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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-14
        • 1970-01-01
        • 1970-01-01
        • 2011-01-17
        • 1970-01-01
        相关资源
        最近更新 更多