4

我面临的问题是 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 所致?如果对此有任何想法,请告知。

4

3 回答 3

0

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

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

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

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

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

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

于 2016-07-02T23:49:31.713 回答
0

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

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

然后绑定你的处理程序:

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

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

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

$(selector).submit(function(e){
    e.preventDefault();
    //Your ajax call 
    return false;
});
于 2016-07-03T00:25:52.713 回答
0

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

于 2016-08-20T18:47:48.710 回答