ajax 调用在同一时间发送了重复的 webClient 请求

Duplicate webClient requests sent at exactly the same time from ajax call

我面临的问题是 webClient.UploadData 方法从 ajax 请求立即触发两次。但是当从 aspx 页面调用时,相同的 webClient.UploadData 方法只触发一次。从日志中我可以看到发送的两个请求的时间完全相同.. 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);
 }

我推测这可能是由于在 ajax 调用中将 async 属性 设置为 true?如果对此有任何想法,请告知。

可能是通过 ajax 调用发出了预检请求。

在这种情况下,浏览器将在 POST 请求之前发出带有 Access-Control-Request-Method headers 的 HTTP OPTIONS 请求。

您可以在服务器上或通过浏览器网络控制台检查两个请求的 HTTP Method 吗?正如我所说,第一个可能是 OPTIONS,第二个是 POST.

要克服这个问题,您有几个选择,可能最简单的方法是确保脚本和它调用的端点位于同一域中。

如果失败,您可以通过检查 dataInputdata 变量的值来简单地进行一些条件检查以确保有字节要发送。

如果这没有帮助,请提供有关设置的更多信息,即脚本 A 在服务器 X 上,脚本 B 在服务器 Y 上,等等。

如果您使用的是点击事件,请确保该事件只触发一次。为确保这一点,首先取消绑定任何点击事件:

$(selector).unbind('click');

然后绑定你的处理程序:

$(selector).bind('click', function() {//...});

//You can chain calls !
$(selector).unbind('click').bind('click', function() {//...});

如果您使用 buttonsubmit 来触发 ajax 事件,请确保您阻止了默认行为:

$(selector).submit(function(e){
    e.preventDefault();
    //Your ajax call 
    return false;
});

代码中的问题是 HTML 中有 2 个地方有 CSS class "dob" 并且有 jquery 代码$(".dob").each(函数(elem,val){...} 此函数导致 ajax 调用...