3

我正在尝试调用托管在我的本地主机上的网络服务。这个 AJAX 调用对我有用,我可以看到“授权”令牌正在发送到服务的请求的标头中。

    $.ajax({
        type: method,
        url: serviceUrl,
        beforeSend: function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader("Authorization",  Token); },
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        ProcessData: true,
        cache: false,
        success: successHandler,
        error: errorHandler
    });

但是这次我尝试调用托管在 Azure Cloud 上的服务,并且相同的 AJAX 调用有效,但它不发送标头内容。我正在使用提琴手检查请求的标头内容。我可以做些什么来使标头具有“授权”令牌吗?

4

2 回答 2

2

这可能是跨域策略限制。您必须确保 ajax 调用和服务在同一个域内,否则您将不得不做一些黑客攻击才能使其正常工作。

于 2012-11-21T18:24:14.417 回答
0

浏览器级别有安全策略来防止跨域 AJAX 调用。有多种解决方法(例如使用 XML 而不是 JSON这个 jQuery 插件),但最“正确”的似乎是使用 JSONP 而不是 JSON,我认为您可以通过更改dataTypeAJAX 调用中的

$.ajax({
    //...etc.
    dataType: "jsonp",
    //...etc.
});

如果这不是问题,请尝试添加return true;到您的beforeSend处理程序。如果返回,请求将被取消false,但我不知道如果它根本不返回值会发生什么。

于 2012-11-21T18:33:27.803 回答