龙空技术网

通过jsonp实现js跨域请求php脚本的解决方案

任我玩 459

前言:

此刻朋友们对“js向php传参”都比较看重,姐妹们都想要学习一些“js向php传参”的相关知识。那么小编在网上网罗了一些关于“js向php传参””的相关内容,希望看官们能喜欢,朋友们一起来了解一下吧!

公司需要新开发一个项目,这个项目和其他产品有关联。现在需要从其他产品的页面通过加载js文件来实现数据交换。简单的说就是:有两个产品,分别是A和B,A产品提供JS文件接口给B产品,B产品只需把JS接口文件引入到自己的页面即可显示A产品的数据。

ajax使用json请求的话,如果是相同域名下是可以的。但是跨域的话就不能访问了。这时需要使用jsonp来解决问题。如果以下教程帮到了您,请点击关注哦!

A产品是新项目,负责编写JS接口文件,域名是localhost.testlink.com;

B产品引入JS接口文件,域名是localhost.xyh.com。

1、在A产品里编写JS接口文件代码。

var src = $('script[id=certcenter]').attr('src');

这段代码的作用是通过id来获取B产品引入js时的src属性字符串,从而获取参数。

if(isUndefined(src)){throw new Error("error tips from certCenter:js引入失败!");}

为了保险起见,如果B产品未引入或者id不对,将抛出异常。

var param = GetSrcParam(src);
//从引入的js获取参数function GetSrcParam(src) {//截取src中"?"符后的字串var index = src.lastIndexOf("?");var url = src.substr(index+1,src.length);var theRequest = new Object();strs = url.split("&");for(var i = 0; i < strs.length; i ++) {theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);}return theRequest;}

这是截取src字符串里的参数。

//判断参数是否正确if(isUndefined(account)){throw new Error("error tips from certCenter:参数account未传入!");}if(isUndefined(token)){throw new Error("error tips from certCenter:参数token未传入!");}if(isUndefined(dleft) || isNaN(dleft)){dleft = 10;}if(isUndefined(dtop) || isNaN(dtop)){dtop = 10;}if(isUndefined(width) || isNaN(width)){width = 200;}if(isUndefined(height) || isNaN(height)){height = 80;}

校验参数是否有传入。B产品必传的参数是用户账户account和加密校验token。

$.ajax({type: 'GET',cache: false,url:"",data:{"account":account,"token":token},dataType: "jsonp",jsonp: "callback",jsonpCallback: "success_jsonpCallback",success:function(result){var status = result.status;var msg = result.msg;var data = result.data;if(status == 1){var count = data.count;var return_url = data.url;var content = "<a target='_blank' href='"+return_url+"' id='cert_content'>您新来了<b>"+count+"</b>个</a>";console.log(content);$(document.body).append(content);}else{console.log("error tips from certCenter:"+msg);}},error:function () {console.log("error tips from certCenter:数据请求失败,请稍后重试!");}});

通过jsonp的ajax,请求A产品的PHP脚本。

A产品的PHP脚本部分代码如下:

以上代码是接收ajax传过来的参数以及安全性校验。jsonp返回的方法是:先将内容json_encode,并用括号包起来,

然后连同jsonp的callback方法名一起输出。

如果PHP脚本处理成功,将返回status为1的内容。

然后js那边接收返回的内容,处理后进行展示。

B产品引入JS文件的方法是:

<script id="certcenter" src=";token=1e67ce6da2888ecebe20b73415725e46&dleft=200&dtop=100&width=400&height=80"></script>

浏览器里打开B产品的这个页面,输出如下图:

通过上图知道:确实是从域名localhost.xyh.com来请求域名localhost.testlink.com的数据。

不知道以上教程有没有写清楚,如果有任何疑问和建议,欢迎评论提问!

标签: #js向php传参 #js与php交互实例 #js连接php #jsphp