关于jsonp跨域请求数据-php-java

什么是jsonp

首先,本篇博客是因为在看遍几乎在网络上crtl+c的文章后,没有一丝营养收获,熬夜写了一篇关于跨域请求数据jsonp的文章,接下来就听我娓娓道来。

  1. jsonp是什么
    jsonp 全称是JSON with Padding,是为了解决跨域请求资源而产生的解决方案,是一种依靠开发 人员创造出的一种非官方跨域数据交互协议。
    一个是描述信息的格式,一个是信息传递双方约定的方法。
    好了,大家肯定是带着疑问来的,这些都是扯皮。接下来上代码。
  2. jsonp的ajax请求体
$.ajax({                		
	url:"url",
    type:"GET",
    dataType:"jsonp",
    jsonp: "callback",
    jsonpCallback: "success_Callback",
    success:function (json) {
          alert(json[0])
     },
     error: function (XMLHttpReuqest, textStautus, errothrown) {
          console.log(XMLHttpRequest.status);
          console.log(XMLHttpReuqest.readyState);
          console.log(XMLHttpRequest.responseText);
          console.log(textStautus);
          console.log(errothrown);
         },
       });
  });
	接下开咋们来分析一下,这个jsonp: "callback"以及jsonpCallback: "success_Callback"
	这两个是什么玩意。
	1.jsonp: "callback": 这个表示你的jsonp版本的ajax会有一个回调函数产生,一般默认值
				都是callback,在你的后台,你可以通过request-->param("callback"),来
				获取接下来jsonpCallback的回调函数名称。
	2.jsonpCallback: "success_Callback":这个参数的值,如果不指定,jquery将会自动生成,
				而你的服务器就需要通过request-->param("callback")来获取这个值,比如现在,
				就行该是success_Callback值,谨记必须服务器要返回jsonp格式的数据。

服务器怎么处理?

  1. php
    本人在使用tp5框架,框架可以通过助手函数来实现返回jsonp数据格式,上代码:
    直接通过jsonp助手函数实现,这是$record为数组:
public function getUserRecordMessage(){
        $record = (new Record())->getFalseMessage();
        $record = json_decode(json_encode($record));
        $record = (array)json_encode($record,JSON_FORCE_OBJECT);
        return jsonp($record);
    }
  1. java
    至于Java代码的实现,可以通过request来获取参数callback的值,即获取到的值为success_Callback,通过拼接,将其拼接为jsonp后return回去。
服务器代码:
public String getUser() {
	String callback = request.getParameter("callback");
    result = callback+"({\"flag\":\"successfuly\"})";//返回必须是json字符串;
    return SUCCESS;
}


xml配置

<package name="json" extends="json-default" namespace="/">      
    <action name="userRegist" class="com.credit.action.RegistAction" method="getUser"> 
        <result name="success" type="json">
            <param name="root">result</param>
        </result>
    </action>
</package>

好啦,实用,耐用方为上上之策,以上地方如有不足之处,请各位大佬指点一二,互相学习学习,
如有不懂之处,可以给我留言哦。。。。

发布了9 篇原创文章 · 获赞 3 · 访问量 444

猜你喜欢

转载自blog.csdn.net/qq_41740808/article/details/99508590