Отказано в доступе к ajax-запросу javascript

#javascript #jquery #ajax #access-denied #backslash

#javascript #jquery #ajax #отказано в доступе #обратная косая черта

Вопрос:

Я хочу сделать ajax-запрос в javascript для вызова службы 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: "CWSjpado",
        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
    });
});
  

Я думаю, что проблема возникает из-за «имени пользователя», потому что, когда я использую debug, antislash (в имени пользователя) исчезает после вызова ajax-запроса.

Я пытался использовать имя пользователя: «CWS \ jpado», но это не работает (обе антислеши остаются такими). Я не понимаю, потому что с другим именем пользователя (например, bpepin) антислэш не исчезает..

Редактировать: Вы знаете, является ли ‘ j’ escape-символом??

Извините, я не знаю, хорошо ли я объясняю. Скажите мне, хотите ли вы больше информации.

Спасибо!

РЕДАКТИРОВАТЬ: я редактирую добавление двух изображений

используя username = ' j', я получаю 'j' после ajax-запроса

используя username = ‘ j’, я получаю ‘j’ после ajax-запроса

используя username = '\ j', я получаю '\ j' после ajax-запроса используя username = ‘\ j’, я получаю ‘\ j’ после ajax-запроса

Как я могу получить ‘ j’ после ajax-запроса??

Спасибо

Комментарии:

1. Обратитесь к этому сообщению. social.msdn.microsoft.com/Forums/vstudio/en-US /…

2. Вы получаете эту ошибку в консоли браузера? Можете ли вы получить предупреждение «успех»? Эта ошибка не из-за имени пользователя, я думаю!.. вы все еще получаете ошибку, если вы указали «bpepin» в качестве имени пользователя правильно?

3. работает ли это с «другим именем пользователя» ? проблема только в этом имени пользователя?

4. @ShankerPaudel : Я видел этот пост, но это мне не помогло

5. @jeekonline У меня была эта ошибка в Visual Studio debbuger! Нет, я не могу получить предупреждение «успех», доступ запрещен раньше! На самом деле, если я использую bpepin, обратная косая черта не исчезает, но с jpadoan она исчезает… Извините за мои плохие объяснения

Ответ №1:

Вы путаете управляющие символы. Обратная косая черта является экранирующим символом как в javascript, так и в C #, поэтому вашему коду javascript определенно нужна вторая обратная косая черта, чтобы избежать реальной:

 username: "CWS\jpadoan"
  

Фактическая строка в username свойстве будет содержать только одну обратную косую черту, так что это то, что будет передано службе.

При отладке на C #, в зависимости от того, на что вы смотрите, вы можете увидеть или не увидеть вторую обратную косую черту при просмотре содержимого этой строки. Самый простой способ увидеть «реальную» строку в отладчике C # — поместить ее в окно просмотра, затем нажать маленькую кнопку визуализатора, чтобы вызвать всплывающее окно с реальным значением строки.

У вас также есть еще одна обратная косая черта в вашей функции успеха, которая должна быть прямой косой чертой:

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

В обоих случаях ваш javascript будет неправильным, может даже не скомпилироваться должным образом.

Не знаю, единственная ли это проблема, но вам определенно нужно правильно использовать обратную косую черту, прежде чем что-то еще заработает.

Комментарии:

1. «Фактическая строка в свойстве username будет содержать только одну обратную косую черту, так что это то, что будет передано службе». Нет, свойство username будет содержать обратную косую черту 0

2. @El_Pepino j является escape-последовательностью, но не имеет никакого особого значения. j Будет принято как есть, а обратная косая черта будет отброшена. console.log("j"); // "j"

3. Я должен уточнить свой комментарий: если у вас есть "CWS\jpadoan" в javascript, то ваша фактическая строка определенно будет иметь одну обратную косую черту. Если у вас все так, как вы делали изначально, "CWSjpadoan" то, как указал @JonathanLonowski, обратная косая черта будет отброшена, поскольку j это ничего не значит. Другое имя, например, "CWStsmith" будет фактически представлять строку, CWS[tab]smith потому что t это представление tab символа. Другими словами, вам всегда нужно избегать обратных косых черт в javascript.

4. @JonathanLonowski хорошо, и вы знаете, как я могу заставить иметь j ?

5. @El_Pepino и Джон Энос предложили. Вам придется экранировать обратную косую черту в коде , чтобы сохранить ее в качестве символа в значении : console.log("\j".length); // 2