Home  >  Article  >  Backend Development  >  Detailed explanation of the method of calling python across domains from json

Detailed explanation of the method of calling python across domains from json

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

The example in this article describes the method of calling python across domains from json. Share it with everyone for your reference, the details are as follows:

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

Attachment: Introduction to jquery cross-domain request method

Here Introduces the jQuery cross-domain request method and provides simple sample code for reference.

There was a problem with the use of ajax jsonp in the project: the request result could be obtained successfully, but the success method was not executed. Finally, it was solved and recorded.

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 request parameter description:

dataType string The data type returned by the server.
If not specified, jQuery will automatically make intelligent judgments based on the HTTP package MIME information. For example, the XML MIME type is recognized as XML.

Available values:

"xml": Returns an XML document that can be processed with jQuery.
"html": Returns plain text HTML information; the included script tag will be executed when inserted into the dom.
"script": Returns plain text JavaScript code. Results are not cached automatically. Unless the "cache" parameter is set.

Note: When making remote requests (not under the same domain), all POST requests will be converted into GET requests. (Because the DOM script tag will be used to load)

"json": Returns JSON data.
"text": Returns a plain text string
"jsonp": jsonp format. When calling a function using jsonp format, when accessing the url, "callback=callbackFunName" will be automatically added to the end of the url to execute the callback function (callbackFunName).

jsonp string

Rewrite the name of the callback function in a jsonp request. This value is used to replace the "callback" part of the url parameter in a get or post request such as "callback=?". For example, jsonp:'callbackfun' will generate "callbackfun=?" and pass it to the server.

jsonpCallback String This parameter specifies a callback function name for the jsonp request.

This value will be used to replace the random function name automatically generated by jQuery. That is the question mark part in "callback=?" above.

This is mainly used to allow jQuery to generate unique function names so that requests are easier and callback functions and error handling can be conveniently provided.

You can also specify this callback function name when you want the browser to cache GET requests.

The main difference between ajax jsonp and ordinary ajax requests is the processing of request response results. The response result shown in the above code is:

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

In fact, it is to call the jsonp callback function jsonpCallback, and pass the string or json to be responded to this method. Regarding the customized jsonp callback function, the success function It will not work, probably its underlying implementation (of course this is the default callback function, otherwise the success method will not be executed):

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

I hope this article will help everyone in Python programming. help.

For more detailed explanations on how to call python across json domains, please pay attention to the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn