2012-03-30 8 views
1

Ich habe einige schwere jQuery-Domain-Probleme gehabt, also habe ich versucht, durch web2py zu umgehen.Abrufen von POST-Daten von Web2py in lokale HTML-Datei

Ich sende POST-Daten von einer lokalen HTML-Datei an meinen web2py-Server. Web2py erstellt dann einen Python-POST auf einem zweiten Server (der das domänenübergreifende Problem löst) und erhält die erwartete Antwort. Wie sollte ich diese Antwort zurück zu meiner lokalen HTML-Datei bekommen?

Ich habe darüber nachgedacht, diese Ergebnisse in einer Datenbank zu speichern und sie dann mit einem URL-Redirect abzurufen-- aber ich bin mir nicht sicher, ob ich raten könnte, welche URL ich benötigen würde. Vielleicht schnapp dir den letzten Eintrag aus der Datenbank.

Oder gibt es eine bessere Methode?

Ich weiß, es gibt wahrscheinlich viel bessere Methoden, um dies direkt aus der ursprünglichen lokalen HTML-Datei zu tun und Web2py vollständig zu umgehen, aber ich bin viel wohler in Python als js.

Also von Ich versuche zu bekommen:

[local html-Datei] -> [POST web2py] -> [POST zu anderen separaten Server] -> [Antwort zurück an lokale HTML-Datei]

Ich kann das letzte Bein nicht herausfinden.

Mein Controller, der Beiträge an den zweiten Server (funktioniert):

def index(): 
    response.headers['content-type'] = 'text/xml' 
    xml = request.body.read() 
    query_args = { 'data': xml } 
    encoded_args = urllib.urlencode(query_args) 
    url = 'myserver.com' 
    content = urllib2.urlopen(url, encoded_args).read() 
    return response.render(dict(content=XML(content))) 

meine lokale HTML-Datei Post (Korrekter BEITRÄGE) wie folgt aussieht:

<script language="javascript"> 
function check() 
{ 

jQuery('.myclass').each(function(){ 
     var txt = $(this).serialize(); 
      $.ajax({ 
    type: 'POST', 
    url: 'myserver', 
data: 'mydata', 
statusCode: { 
    302: function() { 
     alert("302"); // this is never called 
    }, 
    200: function() { 
     alert("200"); 
    }, 
}, 
success: function (data, textstatus) { 
    console.log(data); 

}, 
error: function (data) { 
}, 

}); 

}); 
} 

</script> 

Antwort

1

Sie werden setzen müssen Code im Handler "success", der die Antwort von web2py auf das lokale HTML-Dokument schreibt.

Etwas wie:

success: function (data, textstatus) { 
    $('#some-element').html(data); 
}, 

Wenn die Post-Anforderung geschieht, können Sie alternativ den Erfolg Handler auf eine neue Seite umgeleitet haben könnte, und irgendwie die XML-Daten in einer Sitzungsvariablen speichern und auf der neuen Seite sehen , aber ich denke, dies nur in Javascript zu tun, wird die Dinge dramatisch vereinfachen.

EDIT: Ich bin mir nicht sicher über die Art Ihrer Daten, also wenn es wirklich XML ist (und nicht (X) HTML von irgendeiner Art) dann müssen Sie die Daten im Erfolgsrückruf verarbeiten anstatt Schreiben Sie es in ein DOM-Element.

Sie benötigen ein leeres Element, vielleicht ein div: <div id='some-element'></div>, um die Antwort zu enthalten.

Klingt das nach dem, was Sie brauchen? Lass es mich wissen, wenn ich es falsch verstanden habe.