我面临的问题是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?如果有任何想法,请告诉我们。
答案 0 :(得分:0)
可能是使用ajax调用进行预检请求。
在这种情况下,浏览器会在HTTP OPTIONS
请求之前发出Access-Control-Request-Method
个POST
标头请求。
您可以在服务器上或通过浏览器网络控制台检查两个请求的HTTP Method
吗?正如我所说,第一个可能是OPTIONS
,第二个是POST
。
为了解决这个问题,你有一些选择,最简单的方法是确保它调用的脚本和端点位于同一个域中。
如果做错了,您可以通过检查dataInput
或data
变量的值来进行一些条件检查以确保有字节要发送。
如果这没有帮助,请提供有关设置的更多信息,即脚本A在服务器X上,脚本B在服务器Y上,等等。
答案 1 :(得分:0)
如果您正在使用点击事件,请确保该事件仅被触发一次。为了确保这一点,首先取消绑定任何点击事件:
$(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;
});
答案 2 :(得分:0)
代码中的问题是有2个地方在HTML中有一个CSS类“dob”,并且有jquery代码和$(“。dob”)。每个(函数(elem,val){... } 这个功能导致进行ajax调用......