【问题标题】:Cross domain ajax request跨域ajax请求
【发布时间】:2013-03-06 19:56:36
【问题描述】:

我想从跨域 URL 中获取 HTML 响应页面。

为此,我使用 ajax 请求,

 $.ajax({
            type: 'GET',
            url: "http://wcidevapps.com/salescentral/idisk/0001000383/iDisk",
            dataType: "json",
            success: function (response) {
                $(response).find('li a').each(function () {
                    listHref.push($(this).attr('href'));
                });

            }
        });

但是在请求之后它没有返回任何结果。

【问题讨论】:

  • 您是否启用了 CORS? enable-cors.org
  • 啊,好吧,我明白了。因此,通常情况下,JavaScript 不允许从其他域加载内容。这称为Same origin policy。但是现在,您可以通过配置 CORS 或使用 JSONP 之类的技巧来解决此问题
  • 不要担心 CORS,因为 JSONP 并不是真正的 ajax 请求,您不需要它。问题是您用于请求的地址根本不返回 JSONP?
  • 你尝试过任何答案了吗?
  • 是的,我已经尝试过这个答案,但没有用

标签: html ajax jquery asp.net-ajax


【解决方案1】:
<script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
  <script type="text/javascript">
    function NameAFunctionName() {
        $.ajax({
          url: 'http://wcidevapps.com/salescentral/idisk/0001000383/iDisk',
          type: 'GET',
          dataType: 'json',
          headers: {
            //WRITE IF THEIR HAVE SOME HEADER REQUEST OR DATA
          },
          crossDomain: true,
          success: function (data, textStatus, xhr) {
            console.log(data);
          },
          error: function (xhr, textStatus, errorThrown) {
            console.log(errorThrown);
          }
        });
    }   
</script>

【讨论】:

    【解决方案2】:

    检查文档: http://api.jquery.com/jQuery.ajax/

    跨域 (默认:同域请求为false,跨域请求为true)

    类型:布尔值

    如果您希望在同一域上强制执行跨域请求(例如 JSONP),请将 crossDomain 的值设置为 true。例如,这允许服务器端重定向到另一个域。 (添加的版本:1.5)

    【讨论】:

      【解决方案3】:

      我怀疑您看到了这个问题,因为您请求的页面没有响应 json(p) 响应,而是响应重定向到:

      http://wcidevapps.com/salescentral/idisk/0001000383/iDisk/
      

      (注意斜线)

      然后返回内容类型:

      Content-Type:text/html;charset=ISO-8859-1
      

      编辑:如果您的意图是跨域检索上述站点的数据,以便您的脚本进一步解析,我建议您选择以下之一:

      假设 1控制着服务器“http://wcidevapps.com”上的页面

      在这种情况下,您有两个选择:将 CORS 标头“Access-Control-Allow-Origin: *”添加到响应中(并使用 dataType:“html”配置客户端 ajax() 调用),或者创建一个提供与 JSON 相同数据的特殊 JSON(P) 页面(带填充)(并像在 OP 中一样配置客户端 ajax() 调用,使用 dataType:"jsonp")

      假设 2控制服务器 http://wcidevapps.com

      上的页面

      在这种情况下,我能想到的唯一选择是在您控制的站点上设置代理。让该代理“代理”对“http://wcidevapps.com”的请求/响应,但将 CORS 标头“Access-Control-Allow-Origin: *”添加到响应中(并使用 dataType:"html 配置客户端 ajax() 调用")

      【讨论】:

      • 它不起作用,因为数据不是以 JSON 格式返回的,并且还会给出异常为“Uncaught SyntaxError: Unexpected token
      • 你也可以用我给定的站点 URL 试试这个
      • 是的,@Rahul,所以我认为您拥有的唯一选项是我在编辑后的答案中输入的选项
      【解决方案4】:

      如果您使用的是 asp.net 网络服务,那么您需要将其添加到 webconfig 文件中;

      <system.webServer>
          <directoryBrowse enabled="true"/>
      <httpProtocol>
        <customHeaders>
          <add name="Access-Control-Allow-Origin" value="*" />
          <add name="Access-Control-Allow-Headers" value="Content-Type" />
        </customHeaders>
      </httpProtocol>
      </system.webServer>
      

      【讨论】:

      • 为什么启用 directoryBrowse ?任何理由
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-04
      相关资源
      最近更新 更多