Повторяющиеся запросы webClient, отправленные в одно и то же время из вызова ajax
Проблема, с которой я сталкиваюсь, заключается в том, что метод webClient.UploadData дважды запускается из ajax-запроса. Но тот же метод webClient.UploadData запускается только один раз при вызове со страницы aspx. Из журналов видно, что время отправки обоих запросов одинаково. 2016-06-23 05:54:48.477
Ниже приведен фрагмент кода -
var DTO = JSON.stringify({Date: date, Month: month, AgeRange: ageRange, MethodName: "Enroll" });
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "/mypath/TasksHandler.ashx",
data: DTO,
async: true,
success: function(result) {
......
}
TasksHander вызовет следующий метод -
using (var client = new WebClient())
{
client.Headers[HttpRequestHeader.ContentType] = "application/json";
client.Headers[HttpRequestHeader.Accept] = "application/json";
var data = Encoding.UTF8.GetBytes(dataInput);
byte[] result = client.UploadData(url, "POST", data);
output = Encoding.UTF8.GetString(result, 0, result.Length);
}
Я предполагаю, что это может быть связано с установкой свойства async в true при вызове ajax? Пожалуйста, дайте знать, если есть мысли по этому поводу.
3 ответа
Проблема в коде заключалась в том, что в 2 местах имелся CSS-класс "dob" в HTML, и имелся код jquery с $(". Dob"). Each(function(elem,val){...} Эта функция вел к тому, чтобы сделать вызов AJAX...
Если вы используете событие click, убедитесь, что событие срабатывает только один раз. Для этого сначала отмените привязку любого события клика:
$(selector).unbind('click');
Затем свяжите ваш обработчик:
$(selector).bind('click', function() {//...});
//You can chain calls !
$(selector).unbind('click').bind('click', function() {//...});
Если вы используете button
или же submit
чтобы вызвать событие ajax, пожалуйста, убедитесь, что вы предотвращаете поведение по умолчанию:
$(selector).submit(function(e){
e.preventDefault();
//Your ajax call
return false;
});
Может случиться так, что предварительный запрос выполняется с помощью вызова ajax.
В этом случае браузер выдаст HTTP OPTIONS
запрос с Access-Control-Request-Method
Заголовки перед POST
запрос.
Можете ли вы проверить HTTP Method
на два запроса на сервере или через сетевую консоль браузера? Как я уже сказал, это может быть первым OPTIONS
а второй POST
,
Чтобы преодолеть это, у вас есть несколько вариантов, возможно, проще всего убедиться, что скрипт и конечная точка, которую он вызывает, находятся в одном домене.
В противном случае вы можете просто выполнить некоторую условную проверку, чтобы убедиться, что есть байты для отправки, проверив значение вашего dataInput
или же data
переменные.
Если это не помогло, то, пожалуйста, предоставьте дополнительную информацию о настройке, то есть скрипт A находится на сервере X, скрипт B находится на сервере Y и т. Д.