【问题标题】:CORS request using jQuery - $.ajax()使用 jQuery 的 CORS 请求 - $.ajax()
【发布时间】:2015-02-27 06:52:51
【问题描述】:

我正在开发一个 Web 应用程序,其中数据来自不同的域。我的意思是,在我的应用程序中,几乎 90% 的请求都是跨域请求。

在 IIS 上部署此应用程序时,我无法获取数据。

服务器部署在http://some.ip.add/crmservice 客户端部署在http://diffent.ip.add/saascrm

我正在使用 jQuery 2.0 使用 $.ajax(); 以异步方式获取数据;

注意:数据以 xml 格式输入

还在 web.config 文件中添加了一些内容。

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
      </customHeaders>
    </httpProtocol>
</system.webServer>

这是我的sn-p。

$.support.cors = true;
      $.ajax({
                        type: "GET",
                        url: 'http://some.ip.add/crmservice/crmservice.asmx/HandShake', 
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        crossDomain: true,
                        beforeSend: function (request) {
                        //    debugger;
                            request.setRequestHeader("Access-Control-Allow-Origin", '*');
                        },
                        error: function (xhr, status, error) {
                            try {
                              //  debugger;
                                // debugger;
                              //Here i am getting error : Access denied in IE 9.0 and and just "error" in firefox. 
                                var msg = JSON.parse(xhr.responseText);
                                alert(msg.Message);
                            }
                            catch (e) {
                                // debugger;
                                alert(xhr.statusText);
                            }
                            return true;

                        },
                        success: function (data) {
                            debugger;
                            xmlDoc1 = $.parseXML(data.d);
                            $xml1 = $(xmlDoc1);
                            if ($xml1.find('Result').text() == '0') {
                                $(this).MessageBox('success', $xml1.find('Message').text());
                                $("#uxDBName").prop("disabled", false);
                                $("#uxSUPassword").prop("disabled", false);
                                $("#uxServiceURL").prop("disabled", true);
                                GetListOfB1Databases(url);
                            }
                        }
                    });

我的服务器代码是:

全球.asax

protected void Application_BeginRequest(object sender, EventArgs e)
    {
        HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        HttpContext.Current.Response.Cache.SetNoStore();
        EnableCrossDmainAjaxCall();  
    }
    private void EnableCrossDmainAjaxCall()
    {
        HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Origin", "*");

        if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
        {
            HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Methods", "GET, POST");
            HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Headers","Content-Type, Accept");
            HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Origin", "*");
            HttpContext.Current.Response.AppendHeader("Access-Control-Max-Age", "1728000");
            HttpContext.Current.Response.End();
        }
    }

     //Web method
     [ScriptMethod(ResponseFormat = ResponseFormat.Json), WebMethod(EnableSession = true)]
    public string HandShake()
    {
        return General.Response("0", "Tenant is in reachable. Please specify SAP Business One Company database\r\nand 'manager' Password", "");
    }

我在this 上也找到了一些解决方案,我发现 IE 8 和 9 不支持 CORS。 IE 8 * 9 不创建 XMLHttpRequest 对象的实例。它创建 XDomainRequest,因此需要检查用户代理。我找到了替代解决方案here

现在我的问题是我到处都使用 $.ajax() 方法,几乎​​ 90% 的调用是跨域调用。我不想对我的框架进行这种重大更改。

有没有使用 $.ajax() 的解决方案?

请帮帮我,我已经被困一周了。

提前致谢。

【问题讨论】:

  • UM, JSON !== XML 你说你正在返回 XML,但你的 Ajax 代码显示你期待 JSON。
  • 所以有一个 jQuery 插件可以使用 jQuery ajax 执行 XDomainRequest。 github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest
  • 我不认为 xml 可以跨域访问。访问跨域数据需要 AFAIK jsonp,数据应采用 json 格式。
  • @Jai,使用 CORS 没关系。
  • @epascarello 实际上我以前从来没有遇到过这种情况,我也从来没有用 xml 到处寻找它。谢谢,不过现在就去找。

标签: javascript jquery asp.net ajax cors


【解决方案1】:

感谢您为我提供的所有合作和帮助。 我找到了解决方案。

 var url = $("#uxServiceURL").val();
        $.ajax({
            crossOrigin: true,
            url: url + '/HandShake',
            error: function (xhr, status, error) {
                try {
                    alert('Error');
                }
                catch (e) {
                    alert(xhr.statusText);
                }
                return true;
            },
            success: function (data) {
                var d1 = data.replace(/\&lt;/g, '<').replace(/\&gt;/g, '>')
                xmlDoc1 = $.parseXML(d1);

                $xml1 = $(xmlDoc1);
                if ($xml1.find('Result').text() == '0') {
                    $(this).MessageBox('success', $xml1.find('Message').text());
                   
                }
            }
        }); 

【讨论】:

    猜你喜欢
    • 2015-12-15
    • 2013-12-24
    • 2014-09-13
    • 2013-12-06
    • 2017-05-05
    • 2013-06-20
    • 2013-10-08
    相关资源
    最近更新 更多