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
.
要克服这个问题,您有几个选择,可能最简单的方法是确保脚本和它调用的端点位于同一域中。
如果失败,您可以通过检查 dataInput
或 data
变量的值来简单地进行一些条件检查以确保有字节要发送。
如果这没有帮助,请提供有关设置的更多信息,即脚本 A 在服务器 X 上,脚本 B 在服务器 Y 上,等等。
如果您使用的是点击事件,请确保该事件只触发一次。为确保这一点,首先取消绑定任何点击事件:
$(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;
});
代码中的问题是 HTML 中有 2 个地方有 CSS class "dob" 并且有 jquery 代码$(".dob").each(函数(elem,val){...}
此函数导致 ajax 调用...
我面临的问题是 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
.
要克服这个问题,您有几个选择,可能最简单的方法是确保脚本和它调用的端点位于同一域中。
如果失败,您可以通过检查 dataInput
或 data
变量的值来简单地进行一些条件检查以确保有字节要发送。
如果这没有帮助,请提供有关设置的更多信息,即脚本 A 在服务器 X 上,脚本 B 在服务器 Y 上,等等。
如果您使用的是点击事件,请确保该事件只触发一次。为确保这一点,首先取消绑定任何点击事件:
$(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;
});
代码中的问题是 HTML 中有 2 个地方有 CSS class "dob" 并且有 jquery 代码$(".dob").each(函数(elem,val){...} 此函数导致 ajax 调用...