5 Stimmen

Seite durch jquery $.post Antwort ersetzen

Ich verwende $.post von Jquery wie folgt:

$.post("/searchresult", $("#searchDiv").serialize(), function(data) { //??? });

Der Parameter "data" enthält den gesamten HTML-Code der gewünschten Ergebnisseite.

Die Frage ist, wie ich den Inhalt meiner aktuellen Seite durch den von der Funktion $.post zurückgegebenen Inhalt ersetzen kann.

Danke,

Rui

10voto

Matěj G. Punkte 2991

$('body').html(data); sollte es tun.

1voto

Cesar Punkte 3499

Sie können verwenden:

$('body').load("/searchresult", { data : $("#searchDiv").serialize() }, callBackFunction);

0voto

Scott Evernden Punkte 37117

Ich habe dies mit mehreren Ajax-Aufrufen zum Auffüllen einer Seite mit $('body').empty() und dann mehrere $('body').appendTo(...)

Angenommen, Sie können dafür sorgen, dass Ihr Webservice nur innerHtml von body (und nicht ein ganzes HTML-Dokument) zurückgibt, denke ich, dass nur $('body').html(data) Sollte funktionieren. Wenn nicht, würde ich erwägen, den Körper mit einem IFRAME zu laden, der diese URL src's.. oder ähnlich

0voto

Yogurt The Wise Punkte 4199

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();
    };

0voto

empe3.X Punkte 21

Ich habe herausgefunden, dass es funktioniert, wenn das Formular dynamisch an den Textkörper angehängt wird und direkt danach gesendet wird. Auf diese Weise nutzen Sie traditionelle Post w/o zeigt das Formular auf der Seite.

var url = 'action.php';
var form = $('<form action="'+url+'" method="post" />');
$('body').append(form);
form.submit();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X