Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么IE 11浏览器对jQuery AJAX POST请求的内容长度随机为0?_Java_Jquery_Ajax_Internet Explorer 11_Waffle - Fatal编程技术网

Java 为什么IE 11浏览器对jQuery AJAX POST请求的内容长度随机为0?

Java 为什么IE 11浏览器对jQuery AJAX POST请求的内容长度随机为0?,java,jquery,ajax,internet-explorer-11,waffle,Java,Jquery,Ajax,Internet Explorer 11,Waffle,我正在开发基于SpringMVC的webapp 以下是我的环境详细信息:- Java1.8.0\u162(64位),Spring4.3.1,ApacheTomcat8.0.49,Waffle-1.8.3用于SSO,jquery-1.11.3和GoogleCharts API 已将以下JavaScript代码放入其中一个常见JS文件中:- $.ajaxSetup({cache:false}) jQuery AJAXPOST向服务器发出的请求在Mozilla和Chrome浏览器中完美地工作。 但是对

我正在开发基于SpringMVC的webapp

以下是我的环境详细信息:-
Java1.8.0\u162(64位)
Spring4.3.1
ApacheTomcat8.0.49
Waffle-1.8.3
用于SSO,
jquery-1.11.3
GoogleCharts API

已将以下JavaScript代码放入其中一个常见JS文件中:-
$.ajaxSetup({cache:false})

jQuery AJAX
POST
向服务器发出的请求在MozillaChrome浏览器中完美地工作。 但是对于IE11浏览器,jQueryAjax
POST
请求只有在第一次加载窗口时才能正常工作。 然后随机失败&一旦失败,后续请求也会失败

以下是IE 11浏览器的网络选项卡的快照:-

  • 成功ajax
    POST
    请求:

  • 失败ajax
    POST
    请求:

  • 两个请求在各自的请求体中都有JSON对象。 但是,对于成功的请求,
    Content-Length
    属性值为416(字符串化JSON对象的总字符数),对于失败的请求,0。 对于随机失败的
    POST
    请求和后续请求,
    内容长度始终0,但计算的JSON对象始终存在于请求正文中。
    在每个请求中,JSON对象都是动态构建的

    UPDATE-1(2018年3月26日)以下是
    web.xml
    文件中定义的
    Waffle
    AD身份验证配置:-

    <filter>
        <filter-name>SecurityFilter</filter-name>
        <filter-class>waffle.servlet.NegotiateSecurityFilter</filter-class>
        <init-param>
            <param-name>principalFormat</param-name>
            <param-value>fqn</param-value>
        </init-param>
        <init-param>
            <param-name>roleFormat</param-name>
            <param-value>both</param-value>
        </init-param>
        <init-param>
            <param-name>allowGuestLogin</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>securityFilterProviders</param-name>
            <param-value>
                waffle.servlet.spi.NegotiateSecurityFilterProvider
            </param-value>
        </init-param>
        <init-param>
            <param-name>waffle.servlet.spi.NegotiateSecurityFilterProvider/protocols</param-name>
            <param-value>
                Negotiate
                NTLM
            </param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>SecurityFilter</filter-name>
        <url-pattern>/welcome.do</url-pattern>
    </filter-mapping>
    
    IE 11版本详细信息:

    另外,我正在使用谷歌图表API在页面上呈现图表。请求被发送到GoogleCharts API服务器。这在IE浏览器中是否有效

    使其在IE 11浏览器中工作的解决方案是什么

    对Federico klez Culloca在评论部分提出的问题的回答:

  • 请求(客户端)端没有错误。但是来自服务器的响应说,
    客户端发送的请求在语法上不正确
    。以及响应头
    响应HTTP/1.1 400错误请求

  • 请求正文内容绝对没有区别

  • str_THIS_WA_URL变量
    指向与webapp相同的域,即AJAX请求位于当前域中


  • 将时间戳(shawn在下面的评论部分中的建议)添加到URL并没有解决问题。

    IE将此作为一种优化,因为它希望服务器使用HTTP/401凭据质询进行响应,并且两次传输正文将是一种浪费

    在您的情况下,由于
    /welcome.do
    由NTLM保护,IE现在假定
    /
    和下面的所有内容都是安全保护空间的一部分,因此将无车身后优化应用于所有内容

    解决方法是将
    /welcome.do
    移动到
    /secured/welcome.do
    并确保
    /secured
    下没有不安全的资源


    此处有更多详细信息:。

    后端有任何错误/异常吗?请检查请求正文,看看这两个调用之间是否有差异。另外,如果可能,请显示执行实际请求的代码。我刚刚注意到您的应用程序正在从不同的域请求数据。你检查过了吗?你读过描述相同症状的书吗?你会引发这种情况吗?大约两年前我因为这个问题头疼。。。一些答案对我有帮助
    function getData() {
        let dashboardFilterParams=new DashboardFilterParams(<passing the arguments to this constructor>);
        //alert(JSON.stringify(dashboardFilterParams));
        //console.dir(dashboardFilterParams);
        $.ajax({
                url: str_THIS_WA_URL+"/xyz/abcdXYZ.do?httpReqType=ajaxReq",
                data: JSON.stringify(dashboardFilterParams),
                dataType: "json",
                contentType: "application/json",
                mimeType: "application/json",
                type: "POST",
                success:function(responseData){
                            if(responseData && "success"===responseData.reqResult) {
                                //populating tables & drawing charts using Google Charts JS API if successfully fetched the data
                            } else {
                                //showing error message
                            }
                        },
                error:function(data,status,er) {
                            showTheMessage("danger","Error getting data");
                            console.log("error: "+JSON.stringify(data)+"\n status: "+status+"\n er:"+er);
                        }
         });
    }