我有一个HTML / Javascript页面正在对.NET ajax处理程序(.ASHX)进行jQuery ajax调用。在第一次调用时,我在数据对象中传递的参数是正确的。但在后续调用中,它们是NULL。
JavaScript设置:
var data = {
requestType: "RecentMXMeetings",
meetingType: "Maintenance",
baseDate: "6/15/2016",
daysPast: 90,
daysFuture: 30
}
$.ajax({
type: "GET",
url: "ajaxHandler.ashx",
dataType: "text",
cache: false,
data: data,
success: function (result) {
alert("Success: " + result.responseText);
},
error: function (result) {
alert("Error: " + result.responseText);
},
fail: function (result) {
alert("Error - Fail: " + result.responseText);
},
always: function (result) {
alert("Always: " + result.responseText);
}
});
处理程序代码(.ashx):
public class ajaxHandler : IHttpHandler {
public void ProcessRequest(HttpContext context) {
string retJSON = "NODATA";
var x = context.Request.Params["requestType"];
if (!String.IsNullOrEmpty(x)) {
switch (x) {
case "RecentMXMeetings":
retJSON = SerialiseRecentMeetings(context);
break;
// other cases...
}
}
context.Response.ContentType = "text/plain";
context.Response.Write(retJSON);
}
public bool IsReusable {
get {
return false;
}
}
//
// SerialiseRecentMeetings() and other methods...
//
}
我在“var x = context....
”上添加了一个断点。在第一次运行时,x ==“RecentMXMeetings”。在第二次和子序列运行中,x == null。
以下是我在调试时能够确定的内容:
如果我将ajax类型从“GET”更改为“POST”并运行它,然后将其更改回“GET”并再次运行,数据对象参数将正确返回一次,然后后续调用再次为NULL。在“GET”和“POST”之间来回切换可以解决一个呼叫的问题。
问题是间歇性的。有时在四到五次运行后,x将返回“RecentMXMeetings”,然后再次返回null。
在两次运行之间等待一段时间有时会“重置”它,这对于那次运行会有好处。然后再回到null。
这是我第一次尝试使用C#中的ajax处理程序,所以我非常喜欢这个。
这是一个缓存问题吗?这里有异步问题吗?我可能没有正确使用或处理HttpHandler吗?
答案 0 :(得分:0)
事实证明我的问题本身与代码本身无关,而是我如何运行该项目。
Visual Studio,当您单击"启动调试"按钮将在其根文档(即index.html)上启动解决方案。这是因为当前打开的文档是可运行的类型,例如.html。如果您当前打开的窗口是您的类文件之一(即.cs),它将不会尝试运行类文件,但会在您的根文档中启动调试会话。
但是,如果这是您当前打开的文档,它将尝试单独运行Generic Handler(.ashx)。并且,通过这样做,它不是从index.html页面开始,它发出我的ajax调用并将参数发送给Handler。所以,我的Params集合是null,因为它实际上是null。单独运行.ashx不会提供任何参数。
因此,将我的调用类型从GET更改为POST并再次返回GET后它的工作原因是因为这样做,我打开index.html文件进行更改,当我再次启动调试会话时,我当前的文档是index.html文件,而不是Generic Handler .ashx文件。
我可能会因为犯这个愚蠢的错误而失去一百个声誉点。但是,如果它有助于其他人,那就是它。