#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-запроса
Как я могу получить ‘ 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