You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IE8无法运行:SharePoint 2010中Ajax调用API遇No Transport错误

解决SharePoint 2010中Ajax调用API的"No Transport"错误(无需编辑母版页)

这个"No Transport"错误在jQuery Ajax场景里,大多和跨域请求限制或者旧版jQuery对IE的XDomainRequest支持不足有关。既然你没法修改母版页,咱们就用只需要在页面局部添加脚本的方案来解决:

方案1:升级jQuery(通过站点资产库加载,无需母版页)

如果当前用的是较老的jQuery版本(比如1.4.x及更早),它默认缺失跨域请求的transport支持。你可以把兼容SharePoint 2010的jQuery版本(比如1.12.x)上传到站点的SiteAssets库,然后在自己的Web Part里动态加载,避免和SharePoint自带的jQuery冲突:

// 先检查是否已加载合适的jQuery,没有则动态加载
if (typeof jQuery === 'undefined' || jQuery.fn.jquery < '1.12.0') {
    var script = document.createElement('script');
    script.src = '/sites/你的站点名称/SiteAssets/jquery-1.12.4.min.js'; // 替换成你上传的jQuery路径
    script.type = 'text/javascript';
    document.head.appendChild(script);
}

// 发起Ajax请求的函数
function makeApiCall() {
    jQuery.ajax({
        url: '你的API地址',
        type: 'GET',
        dataType: 'json',
        success: function(data) {
            console.log('请求成功:', data);
            // 这里处理返回的数据
        },
        error: function(xhr, status, error) {
            console.error('请求失败:', status, error);
        }
    });
}

// 确保jQuery加载完成后执行请求
if (typeof jQuery !== 'undefined') {
    makeApiCall();
} else {
    script.onload = makeApiCall;
}

方案2:手动添加XDomainRequest Transport(适配IE8/9)

SharePoint 2010常和IE8/9打交道,这些旧IE版本不支持标准CORS,需要用XDomainRequest。你可以在脚本里手动添加这个transport,不需要改动母版页:

// 针对IE8/9添加XDomainRequest支持
if (jQuery.support.cors === false && window.XDomainRequest) {
    jQuery.ajaxTransport(function(options) {
        if (options.crossDomain && options.async) {
            if (options.timeout) {
                options.xdrTimeout = options.timeout;
                delete options.timeout;
            }
            var xdr;
            return {
                send: function(headers, complete) {
                    xdr = new XDomainRequest();
                    xdr.onload = function() {
                        complete(200, 'OK', { text: xdr.responseText }, 'Content-Type: ' + xdr.contentType);
                    };
                    xdr.onerror = function() {
                        complete(404, 'Not Found', { text: xdr.responseText });
                    };
                    xdr.ontimeout = function() {
                        complete(408, 'Request Timeout', { text: xdr.responseText });
                    };
                    xdr.timeout = options.xdrTimeout || 30000;
                    xdr.open(options.type, options.url);
                    xdr.send((options.data && jQuery.param(options.data)) || null);
                },
                abort: function() {
                    if (xdr) xdr.abort();
                }
            };
        }
    });
}

// 正常发起Ajax请求
jQuery.ajax({
    url: '你的API地址',
    type: 'GET',
    crossDomain: true,
    success: function(data) {
        console.log('请求成功');
    }
});

方案3:使用SharePoint自带的SP.RequestExecutor(推荐)

SharePoint 2010自带了SP.RequestExecutor对象,专门处理跨域/同域API请求,不需要依赖jQuery,也不会出现No Transport问题,而且只需要加载SharePoint内置脚本:

// 先加载SharePoint的RequestExecutor脚本
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function() {
    var executor = new SP.RequestExecutor('你的站点URL'); // 同域请求填当前站点URL即可
    executor.executeAsync({
        url: '你的API地址',
        method: 'GET',
        headers: { "Accept": "application/json; odata=verbose" }, // 调用SharePoint API时建议添加
        success: function(response) {
            var data = JSON.parse(response.body);
            console.log('请求成功:', data);
        },
        error: function(error) {
            console.error('请求失败:', error);
        }
    });
});

额外注意事项

  • 如果调用的是外部API,要确保该API支持CORS(或对IE8/9支持XDomainRequest),否则浏览器会拦截请求。
  • 把上述脚本放在内容编辑器Web Part或脚本编辑器Web Part里直接添加到页面,完全不需要修改母版页。
  • 调用SharePoint自身API时,优先用SP.RequestExecutor,这是官方推荐的方式,兼容性更好。

内容的提问来源于stack exchange,提问作者Sai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:24:12