ホームページ  >  記事  >  バックエンド開発  >  jsonからドメインを越えてpythonを呼び出す方法を詳しく解説

jsonからドメインを越えてpythonを呼び出す方法を詳しく解説

高洛峰
高洛峰オリジナル
2017-01-13 13:01:171126ブラウズ

この記事の例では、jsonからドメインを越えてpythonを呼び出す方法を説明しています。参考のために皆さんと共有してください。詳細は次のとおりです:

クライアント:

<!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>

サーバー

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

添付ファイル: jQuery クロスドメイン リクエスト メソッドの紹介

ここでは、jQuery クロスドメイン リクエスト メソッドを紹介し、提供します参考までに簡単なサンプルコード。

プロジェクトでの ajax jsonp の使用に問題がありました。リクエストの結果は正常に取得できましたが、成功メソッドが実行されませんでした。最終的には解決され、記録されました。

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 リクエストパラメータの説明:

dataType string サーバーから返されたデータ型。
指定しない場合、jQuery は HTTP パッケージの MIME 情報に基づいて自動的にインテリジェントな判断を行います。たとえば、XML の MIME タイプは XML として認識されます。

利用可能な値:

"xml": jQuery で処理できる XML ドキュメントを返します。
"html": プレーンテキストの HTML 情報を返します。含まれているスクリプト タグは、DOM に挿入されると実行されます。
"script": プレーンテキストの JavaScript コードを返します。結果は自動的にキャッシュされません。 「キャッシュ」パラメータが設定されていない限り。

注: リモートリクエスト (同じドメインの下ではない) を行う場合、すべての POST リクエストは GET リクエストに変換されます。 (読み込みにDOMスクリプトタグを使用するため)

"json": JSONデータを返します。
"text": プレーンテキスト文字列を返します。
"jsonp": jsonp 形式。 jsonp形式で関数を呼び出す場合、URLにアクセスするとURLの末尾に「callback=callbackFunName」が自動的に追加され、コールバック関数(callbackFunName)が実行されます。

jsonp string

jsonp リクエスト内のコールバック関数の名前を書き換えます。この値は、「callback=?」などの get または post リクエストの url パラメーターの「callback」部分を置換するために使用されます。たとえば、jsonp:'callbackfun' は「callbackfun=?」を生成し、サーバーに渡します。 。

jsonpCallback String このパラメータは、jsonp リクエストのコールバック関数名を指定します。

この値は、j​​Query によって自動的に生成されたランダムな関数名を置き換えるために使用されます。 それが上記の「callback=?」の疑問符の部分です。

これは主に、jQuery が一意の関数名を生成できるようにするために使用され、リクエストが簡単になり、コールバック関数やエラー処理が便利に提供できるようになります。

ブラウザに GET リクエストをキャッシュさせたい場合は、このコールバック関数名を指定することもできます。

ajax jsonp と通常の ajax リクエストの主な違いは、リクエストの応答結果の処理です。上記のコードで示された応答結果は次のとおりです:

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

実際には、jsonp コールバック関数 jsonpCallback が呼び出され、応答する文字列または json がこのメソッドに渡されます。カスタマイズされた jsonp コールバック関数に関しては、success 関数が実行します。動作しません。大まかにその基礎となる実装 (もちろん、これはデフォルトのコールバック関数です。そうでない場合、success メソッドは実行されません):

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

この記事が Python プログラミングのすべての人に役立つことを願っています。

json ドメイン間で Python を呼び出す方法の詳細な説明については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。