【问题标题】:Ajax cross domain script requestAjax 跨域脚本请求
【发布时间】:2013-11-19 06:04:23
【问题描述】:

我有以下代码试图评估从 HTTPS URL 返回的一些 Javascript。我在本地运行代码,在 localhost:8080 但 ajax 请求没有返回脚本,它返回为未定义。

$.ajax({
    crossDomain: true,
    dataType: 'script',
    url: 'https://mysite.io/live?action=isAvailable',
    success: init,
    error: function (jqXHR, textStatus, msg) {
        failure();
    },
    timeout: 2000,
    cache: false
});

function init(data) {
    var isAvailable = undefined;
    eval(data);
    if (isAvailable) {
        chatAvailable();
    } else {
        chatUnavailable();
    }
}

这是我在 Chrome 中访问 URL 时的响应: [https://mysite.io/live?action=isAvailable]:

响应标头: HTTP/1.1 200 正常 内容语言:en-US 内容类型:文本/javascript;charset=UTF-8 日期:2013 年 11 月 19 日星期二 05:59:25 GMT p3p: CP="NON CUR OTPi OUR NOR UNI" x-旧内容长度:23 传输编码:分块

响应正文: var isAvailable = true;

当我在 [http://localhost:8080] 的本地计算机上运行此代码时,任何想法为什么这不起作用?

【问题讨论】:

  • 网址不工作超时
  • 现代浏览器(例如 chrome)不再允许跨站点 ajax 调用。基本上域必须匹配。几个解决方案:1.传递一个标头,上面写着允许某些域上的跨站点脚本,2.使用 jsonp
  • 为什么不直接动态插入一个脚本标签,让浏览器为你加载它,为你执行它并告诉你什么时候完成呢? $.getScript() 可能对你有用。

标签: javascript jquery ajax


【解决方案1】:

您需要在服务器上启用 CORS。 Here 是启用 CORS 的好资源。

【讨论】:

    【解决方案2】:

    试试这样的

        $.ajax({
            dataType: 'jsonp',
            url: 'https://mysite.io/live?action=isAvailable?callback=?',
            success: init,
            error: function (jqXHR, textStatus, msg) {
                failure();
            },
            timeout: 2000,
            cache: false
        });
    

    【讨论】:

      猜你喜欢
      • 2012-02-26
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      • 2013-05-17
      • 2012-04-15
      • 2011-07-05
      • 1970-01-01
      相关资源
      最近更新 更多