Повторяющиеся запросы 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 и т. Д.

Другие вопросы по тегам