Etwas spät für eine Antwort, aber dies schien der beste Ort zu sein, um meine Lösung für ein ähnliches Problem, das Sie hatten, hinzuzufügen.
Hatte eine ähnliche Situation, müssen die .ajax POST html Antwort verwenden, es enthielt Fehlermeldungen.
Das Problem begann mit dem Chrome-Browser, der keine asynchronen Beiträge nach dem Absenden zulässt. Wir hatten einen lang laufenden Prozess und mussten den Status anzeigen. Also unsere Status-Tracker wurde asycn Anrufe machen, während die Vorlage stattfand, arbeitete in den meisten Browser, aber vor kurzem aufgehört zu arbeiten in Chrome.
-Eine Lösung wäre, einen iframe zu verwenden und den anderen serverseitigen Code auf diese Weise aufzurufen. Das war für mich keine Option.
-Oder ändern Sie den serverseitigen Code, um json zurückzugeben und das Zeug auf diese Weise zu behandeln, viel mehr Arbeit neu zu schreiben Client und Server-Code bereits vorhanden.
Ich ging den Weg des Versuchs, das asynchrone Aufrufproblem mit Chrome zu beheben, während ein Submit-Post zu machen und die Html-Antwort zu behandeln. Dies ist, was ich kam mit, und scheint zu funktionieren.
Ich habe so viele Websites besucht und so viele Ideen und Kenntnisse erhalten, dass ich niemandem direkt etwas zuschreiben kann.
Also habe ich im Grunde die $(form).submit() in eine Ajax-Post verwandelt. Aber dies hat immer noch Probleme in Chrome und anderen Browsern versuchen, die zurückgegebene HTML-Antwort zu behandeln. Das größte Problem, Neuverdrahtung der Schaltfläche Ereignisse und das Javascript.
Hoffentlich hilft das jemandem.
if (IsChrome()) {
$.ajax({
type: 'POST',
url: oo.url,
data: oo.data, // serialized form $(form).serialize(); althought .serializeArray() also seems to work here.
dataType: "html",
cache: false,
async: true,
success: function (result, status, xhr) { HandleChromePostAlreadySubmittedSuccess(result, status, xhr); }, // this being the most important one to handle.
error: function (jqXHR, textStatus, errorThrown) { HandlePostAlreadySubmittedError(jqXHR, textStatus, errorThrown); },
complete: function (jqXHR, textStatus) { HandlePostAlreadySubmittedComplete(jqXHR, textStatus); }
});
} else {
// will POST(even though load is for GETs).
// Chrome does not like the hack way. not sure why, the async status calls stop firing.
// IMPORTANT use .serializeArray() below - will force a POST instead of a GET.
// be careful using the jq LIVE on the submit button, may cause multi events to fire.
// The Complete func below, was not really needed(mines an empty func), unlike the chrome above.
$.load(oo.url, $(form).serializeArray(), function (responseText, textStatus, XMLHttpRequest) { HandlePostAlreadySubmittedComplete(XMLHttpRequest, textStatus); });
}
HandleChromePostAlreadySubmittedSuccess = function (result, status, xhr) {
// Chrome - this is suppose to be the correct way.
// Other browsers decided to program write and close a different way, causing the page to unload, from what i understand.
document.write(result);
document.close();
};