Ich habe eine HTML/Javascript-Seite, die einen jQuery-Ajax-Aufruf an einen .NET-Ajax-Handler (.ASHX) macht. Beim ersten Aufruf sind die Parameter, die ich im Datenobjekt übergebe, vorhanden und korrekt. Aber in nachfolgenden Aufrufen sind sie NULL.Warum sind IHttpHandler Request.Params beim ersten Aufruf korrekt, aber NULL beim zweiten Aufruf?
JavaScript Setup:
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);
}
});
Handler-Code (.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...
//
}
füge ich einen Haltepunkt auf "var x = context....
". Beim ersten Lauf x == "RecentMXMeetings". Bei den zweiten und den folgenden Runs ist x == null.
Hier ist, was ich in der Lage gewesen, in dem Debuggen es zu bestimmen:
Wenn ich den Ajax-Typen von ändern „GET“ auf „POST“ und starten Sie es, es dann zu „GET“ und ändert zurück laufen Auch hier werden die Datenobjektparameter einmal korrekt zurückgegeben, und nachfolgende Aufrufe sind wieder NULL. Das Umschalten zwischen "GET" und "POST" behebt das Problem für einen Anruf.
Das Problem ist intermittierend. Manchmal nach vier oder fünf Läufen wird x "RecentMXMeetings" zurückkommen und dann wieder auf null zurückgehen.
Warten auf eine Weile zwischen den Läufen wird manchmal "zurückgesetzt" und es wird gut für diesen Lauf sein. Dann gehe zurück, um wieder Null zu sein.
Dies ist mein erster Ausflug in Ajax Handler in C#, also bin ich ziemlich Anfänger auf diesem.
Ist das ein Caching-Problem? Gibt es hier ein asynchrones Problem? Werde ich den HttpHandler vielleicht nicht richtig nutzen oder entsorgen?
Können Sie 'POST' anstelle von' GET' verwenden? –
versuchen Sie es mit Fiddler, um Ihren Netzwerkverkehr anzuzeigen und zu sehen, ob der HttpHandler tatsächlich die Abfragezeichenfolge jedes Mal erhält. – Sal