拒绝访问:ajax请求javascript

3
我想在javascript中发起ajax请求来调用WCF服务,但是我遇到了一个错误:访问被拒绝。
下面是代码:

 $("#test").on("click", function () {
    $.ajax({
        type: "GET",
        url: 'http://localhost:1111/Design_Time_Addresses/WCFandEFServiceEnvol/PrestationService/Methode',
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        username: "CWS\jpado",
        password: "Password",
        success: function (prestaList) {
            alert("success");
            var prestaPicker = $("#Presta");
            $(prestaList.d).each(function () {
                prestaPicker.html(prestaPicker.html() +
                    "<p>" + this.id_prestation + "<\p>"
                );
            });
        },
        error: onError
    });
});

我认为问题源于“username”,因为当我使用调试时,反斜杠\(在用户名中)在调用ajax请求后消失了。
我尝试使用username: "CWS\\jpado",但它不起作用(两个反斜杠保持不变)。我不明白,因为对于另一个用户名(例如bpepin),反斜杠不会消失。。
编辑:您知道'\j'是否是转义字符吗?
抱歉,我不知道我是否解释得清楚。如果您需要更多信息,请告诉我。
谢谢!
编辑:我添加了两张图片
使用username = '\j'时,在ajax请求之后我得到'j'
使用username = '\\j'时,在ajax请求之后我得到'\\j'
我如何在ajax请求后得到'\j'?
谢谢

请参考此帖子:http://social.msdn.microsoft.com/Forums/vstudio/en-US/979a1df7-7e04-45d6-92bb-6a9ee614941c/how-to-consume-wcf-service-in-javascript?forum=wcf - Shanker Paudel
你在浏览器控制台中是否收到了这个错误?你能够弹出“成功”的警告框吗?我认为这个错误不是由于用户名引起的!如果您将“bpepin”作为用户名,您仍然会收到错误提示,对吗? - byJeevan
@ShankerPaudel:我看到了这篇帖子,但它对我没有帮助。 - El_Pepino
@jeekonline,我在Visual Studio调试器中遇到了这个错误!现在我无法获得“成功”提示,因为访问被拒绝!实际上,如果我使用bpepin,反斜杠不会消失,但是使用jpadoan它就会消失...对于我的糟糕解释感到抱歉。 - El_Pepino
@KevinB 我觉得用户名可能是问题所在,但我不确定。事实上,在使用jpadoan进行ajax请求调用后,反斜杠会消失,但使用bpepin却不会。我不知道为什么。。 - El_Pepino
显示剩余2条评论
1个回答

2

您混淆了转义字符。反斜杠是javascript和C#中的转义字符,因此您的javascript代码肯定需要第二个反斜杠来转义真正的反斜杠:

username: "CWS\\jpadoan"
username 属性中的实际字符串只包含一个反斜杠,因此这就是将传递给服务的内容。
在 C# 中调试时,根据你查看的内容,可能会看到第二个反斜杠,也可能不会。在 C# 调试器中查看“真实”字符串的最简单方法是将其放入监视窗口,然后单击小可视化按钮,以弹出具有真实字符串值的弹出窗口。
你的成功函数中还有另一个反斜杠,它应该是正斜杠。
"<p>" + this.id_prestation + "</p>"

在这两种情况下,你的JavaScript可能会出现问题,甚至可能无法正常编译。

不知道这是否是唯一的问题,但在任何其他操作之前,你必须正确使用反斜杠。


用户名属性中实际的字符串只包含一个反斜杠,因此这将传递给服务。 - El_Pepino
@El_Pepino \j 是一个转义序列,但没有任何特殊含义。 j 将按原样接受,反斜杠将被丢弃。 console.log("\j"); // "j" - Jonathan Lonowski
我应该澄清我的评论:如果你在javascript中有"CWS\\jpadoan",那么你的实际字符串肯定只有一个反斜杠。如果你按照最初的方式写成"CWS\jpadoan",那么就像@JonathanLonowski指出的那样,反斜杠将被丢弃,因为\j没有任何意义。不同的名称,比如"CWS\tsmith",实际上将表示字符串CWS[tab]smith,因为\ttab字符的表示形式。换句话说,在javascript中,你总是需要转义你的反斜杠。 - Joe Enos
@JonathanLonowski 好的,你知道我怎么才能拥有 \j 吗? - El_Pepino
@El_Pepino和Jon Enos建议。您需要在代码中转义反斜杠,以将其保留为中的字符:console.log("\\j".length); // 2 - Jonathan Lonowski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接