【问题标题】:Not able to access Web API method using XMLHttpRequest but using Restclient Plugin and etc无法使用 XMLHttpRequest 但使用 Restclient 插件等访问 Web API 方法
【发布时间】:2013-05-12 07:37:01
【问题描述】:

我遇到了一个问题。请用您的专业知识提供帮助。

我正在为一家公司开发网络解决方案。他们为我提供了 Web API 方法 (REST)。此 API 在他们的域中。我也可以从我的域访问它。甚至客户也已经将我的域列入白名单。

我正在尝试使用以下方法调用此方法。但没有运气。我收到以下错误。

错误 NS_ERROR_DOM_BAD_URI:访问受限 URI 被拒绝

函数 GetCustomerInfo() { var URL = "http://webapi.company.com/vx.x/customer/get?format=xml&mobile=9876543210" ; myXmlHttp = 新的 XMLHttpRequest(); myXmlHttp.withCredentials = true; myXmlHttp.onreadystatechange = ProcessRequest; myXmlHttp.open("GET", Url, true,"UID","PWD"); myXmlHttp.send(); }

函数 ProcessRequest() {

if(this.readyState == this.DONE) 
{
        if(this.status == 200 && this.responseXML != null ) 
    {
        alert ("Received Resoponse from Server");
        }
    else
    {
        alert ("Some Problem");
    }
    }

}

我可以在 firefox 插件中从 RESTClient 访问此方法。 甚至我也可以在浏览器地址栏中访问此方法,在 URL 中复制凭据,如下所示。我得到了预期的响应 XML

http://UID:PWD@webapi.company.com/vx.x/customer/get?format=xml&mobile=9876543210

请指教我哪里错了。也许 JSONP 可以帮助我。但是为什么我不能使用 XMLHttpRequest 访问这个 API。

问候 拉朱尔

【问题讨论】:

    标签: javascript html xmlhttprequest restful-authentication


    【解决方案1】:

    浏览器的同源策略不允许您将 XMLHttpRequests 发送到不同的域。您可以通过firefox插件或地址栏访问它的原因是那里没有应用同源策略。

    你是对的,JSONP 可以解决你的问题,虽然你可能会遇到麻烦,因为你不控制服务器端。

    回复您的评论:为了有效地使用 JSONP,服务器不仅需要以 JSON 格式返回您需要的数据,还需要在请求完成时调用回调的 javascript 代码。如果您不控制返回的数据,则无法为此添加必要的代码。 wikipedia 文章为一般情况提供了一个很好的例子。

    我从来没有使用过CORS,因此不能给你太多关于它的信息。这似乎是一个更好的解决方案,但我想它在浏览器之间的兼容性并不令人难以置信。此外,据我了解,您还需要控制服务器,因为它似乎需要额外的 HTTP 标头。

    【讨论】:

    • 谢谢。您能否对此进行更多解释“您可能会遇到麻烦,因为您无法控制服务器端。”。可能是一些您可以分享的网络参考。那会很棒。
    • CORS 怎么样?它可以帮到我吗?
    • @Rajul:查看编辑。在我看来,您有两个选择。首先:要求客户端添加 CORS 所需的标头或 JSONP 所需的代码。其次,如果他们不愿意这样做:向您自己的域发送一个 XMLHttpRequest,您自己的 Web 服务器通过向他们的 Api 发送请求并将结果转发给您来充当代理。服务器不受同源策略的影响。
    猜你喜欢
    • 2015-08-26
    • 2018-05-09
    • 1970-01-01
    • 2020-10-17
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    相关资源
    最近更新 更多