【问题标题】:Access denied ajax request javascript访问被拒绝的ajax请求javascript
【发布时间】:2014-07-02 14:30:27
【问题描述】:

我想在 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
    });
});

我认为问题来自“用户名”,因为当我使用调试时,反斜杠 \(在用户名中)在调用 ajax 请求后消失了。

我尝试使用用户名:“CWS\\jpado”,但它不起作用(两个反斜杠都保持不变)。我不明白,因为使用另一个用户名(例如 bpepin),反斜杠不会消失..

编辑:你知道 '\j' 是否是转义字符吗?

对不起,我不知道我是否解释得很好。如果您想了解更多信息,请告诉我。

谢谢!

编辑:我编辑添加两张图片

使用用户名 = '\j' 我在 ajax 请求后得到 'j'

使用用户名 = '\\j' 我在 ajax 请求后得到 '\\j'

ajax 请求后如何获取 '\j' ?

谢谢

【问题讨论】:

  • 您是否在浏览器控制台中收到此错误?你能得到警报“成功”吗?这个错误不是因为我认为的用户名!.. 如果您将“bpepin”作为用户名正确,您仍然会收到错误?
  • “另一个用户名”,它有效吗?问题只是这个用户名吗?
  • @ShankerPaudel :我看到了这篇文章,但对我没有帮助
  • @jeekonline 我在 Visual Studio 调试器中遇到了这个错误!不,我无法获得警报“成功”,之前访问被拒绝!事实上,如果我使用 bpepin,反斜杠不会消失,但使用 jpadoan 它会消失......对不起我的错误解释

标签: javascript jquery ajax access-denied backslash


【解决方案1】:

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

username: "CWS\\jpadoan"

username 属性中的实际字符串将只包含一个反斜杠,因此这就是将传递给服务的内容。

在 C# 中进行调试时,根据您正在查看的内容,您可能会在查看该字符串的内容时看到也可能不会看到第二个反斜杠。在 C# 调试器中查看“真实”字符串的最简单方法是将其放在监视窗口中,然后单击可视化小按钮以弹出带有真实字符串值的弹出窗口。

您的成功函数中还有另一个反斜杠,应该是正斜杠:

"<p>" + this.id_prestation + "</p>"

在这两种情况下,您的 javascript 都会变得混乱,甚至可能无法正确编译。

不知道这是否是唯一的问题,但您肯定需要正确使用反斜杠,然后才能使用其他任何东西。

【讨论】:

  • "用户名属性中的实际字符串将只包含一个反斜杠,因此这就是将传递给服务的内容。"不,用户名属性将包含 0 个反斜杠
  • @El_Pepino \j 是一个转义序列,但没有任何特殊含义。 j 将按原样使用,反斜杠将被丢弃。 console.log("\j"); // "j"
  • 我应该澄清我的评论:如果您在 javascript 中有 "CWS\\jpadoan",那么您的实际字符串肯定会有一个反斜杠。如果您按照最初的方式使用它,"CWS\jpadoan",那么正如@JonathanLonowski 指出的那样,反斜杠将被丢弃,因为\j 没有任何意义。一个不同的名称,如"CWS\tsmith",实际上将表示字符串CWS[tab]smith,因为\ttab 字符的表示。换句话说,你总是需要在 javascript 中转义你的反斜杠。
  • @JonathanLonowski 好的,你知道我怎样才能拥有 \j 吗?
  • @El_Pepino 和 Jon Enos 建议。您必须对 code 中的反斜杠进行转义,以将其保留为 value 中的一个字符:console.log("\\j".length); // 2
猜你喜欢
  • 2015-01-10
  • 1970-01-01
  • 2017-06-18
  • 2013-11-14
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多