Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Methode zum domänenübergreifenden Aufrufen von Python von JSON aus

Detaillierte Erläuterung der Methode zum domänenübergreifenden Aufrufen von Python von JSON aus

高洛峰
高洛峰Original
2017-01-13 13:01:171124Durchsuche

Das Beispiel in diesem Artikel beschreibt die Methode zum domänenübergreifenden Aufruf von Python von JSON aus. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Client:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  <title>jQuery-跨域请求</title>
  <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
  <script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
  </head>
   <script type="text/javascript">
  jQuery(document).ready(function(){
    $.ajax({
      type : "GET",
      url : "http://10.13.38.43:1234/?id=10&callback=?",
      dataType : "jsonp",
      jsonp: &#39;callback&#39;,
      success : function(json){
          alert(json.account);
        //$(&#39;#msg_box&#39;).html(json);
        //return true;
      }
    });
  });
  </script>
   <body>
  <div id="msg_box"></div>
  </body>
  </html>

Server

import web
urls=(&#39;/&#39;,&#39;Index&#39;,)
class Index:
    def GET(self):
      inputdata=web.input()
      mycallbackfun=inputdata.callback
      #return &#39;hello&#39; +inputdata.id
      return mycallbackfun+&#39;({"account":"XX","passed":"true","error":"null"})&#39;
app = web.application(urls, globals())
if __name__==&#39;__main__&#39;:
    app.run()

Anhang: Einführung in die domänenübergreifende JQuery-Anfrage Methode

Hier stellen wir die domänenübergreifende Anforderungsmethode von jQuery vor und stellen einfachen Beispielcode als Referenz bereit.

Es gab ein Problem bei der Verwendung von Ajax JSONP im Projekt: Das Anforderungsergebnis konnte erfolgreich abgerufen werden, aber die Erfolgsmethode wurde nicht ausgeführt. Lassen Sie es uns aufzeichnen.

function TestAjax()
{
  $.ajax({
    type : "get",
    async : false,
    url : "ajaxHandler.ashx", //实际上访问时产生的地址为: ajax.ashx?callbackfun=jsonpCallback&id=10
    data : {id : 10},
    cache : false, //默认值true
    dataType : "jsonp",
    jsonp: "callbackfun",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)
    jsonpCallback:"jsonpCallback",
      //自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
      //如果这里自定了jsonp的回调函数,则success函数则不起作用;否则success将起作用
    success : function(json){
      alert(json.message);
    },
    error:function(){
      alert("erroe");
    }
  });
}
function jsonpCallback(data) //回调函数
{
  alert(data.message); //
}
public class ajaxHandler : IHttpHandler
{
  public void ProcessRequest (HttpContext context) {
    context.Response.ContentType = "text/plain";
    string callbackfun = context.Request["callbackfun"];
    context.Response.Write(callbackfun + "({name:\"John\", message:\"hello John\"})");
    context.Response.End();
  }
  public bool IsReusable {get {return false;}
}

Ajax-Anforderungsparameterbeschreibung:

dataType string Der vom Server zurückgegebene Datentyp.
Wenn nicht angegeben, trifft jQuery automatisch intelligente Entscheidungen basierend auf den MIME-Informationen des HTTP-Pakets. Beispielsweise wird der XML-MIME-Typ als XML erkannt.

Verfügbare Werte:

"xml": Gibt ein XML-Dokument zurück, das mit jQuery verarbeitet werden kann.
„html“: Gibt reine Text-HTML-Informationen zurück; das enthaltene Skript-Tag wird ausgeführt, wenn es in den Dom eingefügt wird.
"script": Gibt Nur-Text-JavaScript-Code zurück. Ergebnisse werden nicht automatisch zwischengespeichert. Es sei denn, der Parameter „Cache“ ist gesetzt.

Hinweis: Bei Remote-Anfragen (nicht unter derselben Domäne) werden alle POST-Anfragen in GET-Anfragen umgewandelt. (Da zum Laden das DOM-Skript-Tag verwendet wird)

"json": Gibt JSON-Daten zurück.
"text": Gibt eine Nur-Text-Zeichenfolge zurück
"jsonp":jsonp-Format. Wenn Sie eine Funktion im JSONP-Format aufrufen und auf die URL zugreifen, wird „callback=callbackFunName“ automatisch am Ende der URL hinzugefügt, um die Rückruffunktion (callbackFunName) auszuführen.

JSONP-Zeichenfolge

Schreiben Sie den Namen der Rückruffunktion in einer JSONP-Anfrage neu. Dieser Wert wird verwendet, um den „callback“-Teil des URL-Parameters in einer Get- oder Post-Anfrage wie „callback=?“ zu ersetzen. Beispielsweise generiert jsonp:'callbackfun' „callbackfun=?“ und übergibt ihn an den Server .

jsonpCallback String Dieser Parameter gibt einen Callback-Funktionsnamen für die JSONP-Anfrage an.

Dieser Wert wird verwendet, um den zufälligen Funktionsnamen zu ersetzen, der automatisch von jQuery generiert wird. Das ist der Fragezeichenteil in „callback=?“ oben.

Dies wird hauptsächlich verwendet, um jQuery die Generierung eindeutiger Funktionsnamen zu ermöglichen, sodass Anfragen einfacher sind und Rückruffunktionen und Fehlerbehandlung bequem bereitgestellt werden können.

Sie können diesen Rückruffunktionsnamen auch angeben, wenn der Browser GET-Anfragen zwischenspeichern soll.

Der Hauptunterschied zwischen Ajax JSONP und gewöhnlichen Ajax-Anfragen besteht in der Verarbeitung der Anfrage-Antwort-Ergebnisse. Wie im obigen Code gezeigt, lautet das Antwortergebnis:

jsonpCallback({ name:"world",message:"hello world"});

Tatsächlich wird die JSONP-Rückruffunktion jsonpCallback aufgerufen und die Zeichenfolge oder JSON, auf die geantwortet werden soll, an diese Methode übergeben jsonp-Rückruffunktion, Die Erfolgsfunktion funktioniert nicht, wahrscheinlich die zugrunde liegende Implementierung (natürlich ist dies die Standard-Rückruffunktion, sonst wird die Erfolgsmethode nicht ausgeführt):

function default_jsonpCallback(data)
{
  success(data); //在默认的回调方法中执行
}

Ich hoffe, dass dieser Artikel erfolgreich sein wird Nützlich für alle, die sich mit Python-Programmierung befassen.

Ausführlichere Erklärungen zur Verwendung von JSON zum domänenübergreifenden Aufrufen von Python finden Sie auf der chinesischen PHP-Website für verwandte Artikel!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn