从ajax调用完全同时发送的重复webClient请求

时间:2016-06-23 16:16:57

标签: rest webclient webclient.uploaddata

我面临的问题是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);
 }

我猜测这可能是因为在ajax调用中将async属性设置为true?如果有任何想法,请告诉我们。

3 个答案:

答案 0 :(得分:0)

可能是使用ajax调用进行预检请求。

在这种情况下,浏览器会在HTTP OPTIONS请求之前发出Access-Control-Request-MethodPOST标头请求。

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

为了解决这个问题,你有一些选择,最简单的方法是确保它调用的脚本和端点位于同一个域中。

如果做错了,您可以通过检查dataInputdata变量的值来进行一些条件检查以确保有字节要发送。

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

答案 1 :(得分:0)

如果您正在使用点击事件,请确保该事件仅被触发一次。为了确保这一点,首先取消绑定任何点击事件:

$(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;
});

答案 2 :(得分:0)

代码中的问题是有2个地方在HTML中有一个CSS类“dob”,并且有jquery代码和$(“。dob”)。每个(函数(elem,val){... } 这个功能导致进行ajax调用......