#c# #jquery #ajax #webmethod
#c# #jquery #ajax #веб-метод
Вопрос:
У меня есть следующий запрос jQuery AJAX:
function sendUpdate(urlToSend) {
var code = AccessCode;
var url = urlToSend;
var options = { error: function(msg) { alert(msg.d); },
type: "POST", url: "webmethods.aspx/UpdatePage",
data: "{ accessCode: " code ", newURL: '" url "' }",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function(response) { var results = response.d; } };
$.ajax(options);
}
И соответствующий ASP.NET Веб — метод:
[WebMethod]
public static bool UpdatePage(string accessCode, string newURL)
{
bool result = true;
try
{
HttpContext.Current.Cache[accessCode "l"] = newURL;
}
catch
{
result = false;
}
return resu<
}
Все это использовалось для корректной работы с «async: false», однако я должен избавиться от него, поскольку он замораживает браузер до получения ответа. Теперь приведенный выше AJAX-запрос возвращает «undefined».
Кто-нибудь может сказать мне, почему это происходит и в чем проблема?
Спасибо.
Комментарии:
1. Что не определено, «ответ» или «response.d»? Вы должны посмотреть, что такое объект полного ответа, чтобы увидеть, выдает ли он вам какие-либо сообщения об ошибках с сервера.
Ответ №1:
Вы действительно должны убедиться, что правильно закодировали этот JSON. JSON.stringify
является наиболее надежным методом:
data: JSON.stringify({ accessCode: code, newURL: url })
Это гарантирует, что даже если переменные code
and url
содержат некоторые опасные символы, которые нарушат ваши конкатенации строк в результирующем JSON, в конце все будет правильно закодировано. Метод JSON.stringify изначально встроен в современные браузеры, но если вам нужно поддерживать устаревшие, вы можете включить json2.js .
Кроме того, поскольку ваш код больше не блокируется, вы должны убедиться, что если вы вызываете это sendUpdate
с помощью какого-либо нажатия кнопки или отправки формы, вы отменяете действие по умолчанию, возвращая false .
Ответ №2:
Мой способ работает правильно:
[System.Web.Services.WebMethod()]
public static string getHello(string str)
{
//do some things with str
return str;
}
В file .js я определяю эту функцию для вызова webmethod в file .cs:
function CallServerFunction(StrPriUrl, ObjPriData, CallBackFunction) {
$.ajax({
type: "post",
url: StrPriUrl,
contentType: "application/json; charset=utf-8",
data: ObjPriData,
dataType: "json",
success: function (result) {
if (CallBackFunction != null amp;amp; typeof CallBackFunction != 'undefined') {
CallBackFunction(result);
}
},
error: function (result) {
alert('error occured');
alert(result.responseText);
window.location.href = "FrmError.aspx?Exception=" result.responseText;
},
async: true
});
}
Затем вызовите use (вызов в file.js ):
var text = $("#textbox_send").val();
var myresu<
CallServerFunction("Default.aspx/getHello", JSON.stringify({ str: text }), function (myresult) {
if (text != "")
$('#' id).append('<p>' $("#account_user").text() ': ' myresult.d '</p>');
});
Ответ №3:
«Неопределенный» может быть результатом ошибки сервера.Если вы используете Firebug, Firefox (или любой хороший инструмент отладки клиента), вы можете найти ошибку, возвращенную сервером. Вставьте ошибку, если таковая имеется.
Тем не менее, я также отметил, что «данные» для «accessCode» неправильно заключены в кавычки ‘ ’
Исправленный параметр данных будет :
data: "{ accessCode: '" code "', newURL: '" url "' }",
PS:
Поскольку «параметры» имеют другое значение в Jquery, я бы рекомендовал изменить имя переменной на «setting» . Измените «параметры var» на «настройки var». 🙂