JavaScript WebService NS_ERROR_DOM_BAD_URI

时间:2013-07-15 21:13:48

标签: javascript jquery web-services cors

我有一些非常简单的带有两个按钮的javascript代码。第一个提交一个调用Web服务函数的表单,并在新窗口中打开它。

第二个按钮应该做同样的事情,除了我想将来自Web服务的响应文本放到页面上的div中。

Web服务来自我发现here的示例(您可以在底部的zip文件中下载项目。

  • WebService.asmx标记中存在拼写错误,其中Class属性应为“Encosia.Samples.ASMX_CORS.WebService”。

Web服务允许所有来源<add name="Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Headers" value="Content-Type" />,因此跨网站脚本应该没有问题。

JavaScript代码注意:运行Web服务项目时,Visual Studio生成本地主机名)          

<head>
   <title>Test Web Service Using JavaScript</title>
</head>

<body>
    <form action='http://localhost:53276/WebService.asmx/HelloWorld' method="post" target="_blank">
        <input type="submit" value="This Works" class="button">
        <label> This opens a new window with the result of the web service call</label>
    </form>

    <input type='submit' id='btnTest' name='btnTest' value="This Doesn't" onclick="WebRequestTest();" >
    <label> This should fill the div with the result of the web service call</label>
     <div id="MyDiv"></div>


</body></html>

<script language="javascript">

    function WebRequestTest() {
        function handler() {
            //fires when ready state changes
            if (this.readyState == 4 ){ //&& request.responseText != '') {
                var response = request.responseText;
                document.getElementById('MyDiv').innerHTML = response;
                return;
            } 
        }

        var request = new XMLHttpRequest();
        request.onreadystatechange = handler;
        request.withCredentials = true;
        request.open('POST', 'http://localhost:53276/WebService.asmx/HelloWorld', true); //third optional argument: async (default true)
        request.send();
    }

</script>

当我点击第一个按钮时,会打开一个新页面,显示XMLHttpRequest的XML结果。当我点击第二个按钮时,HttpFox告诉我我有一个:

  

NS_ERROR_DOM_BAD_URI错误

结果只是一个空字符串。

我也尝试了jQuery,结果相同:

function WebRequestTest2(){
    $.ajax({
        type: "GET",
        url: "http://localhost:53276/WebService.asmx/HelloWorld",
        dataType: "xml",
        success: function(xml) {
            var myString = $(xml).find('string').text();
    }
    });
}

为了进一步侮辱伤害,上面的JavaScript代码在IE 8中工作正常,但不是我的目标浏览器Firefox 17。

有谁能告诉我如何让Firefox与我的网络服务相处得很好?有人建议我在我的网络服务中可能需要一个CORS库,但这似乎是一个问题,这个问题必须已经内置了已定义的解决方案。

1 个答案:

答案 0 :(得分:0)

我在此示例后使用WebAPI CORS功能解决了我的问题:http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

此外,我需要覆盖firefox发送的原点,因为它在本地加载文件时为null。我用HttpFox来做这件事。