ajax跨域请求模板,jquery实现ajax跨域请求(示例代码)

jsonp是json用来跨域的一个东西。原理是通过script标签的跨域特性来绕过同源策略。

借助script标签,实现跨域请求,示例:

所以只是单纯的返回一个也没有什么意义,我们需要的是数据

如下:可以返回一个字典,不过也可以返回其他的(简单的解决了跨域,利用script)

项目一:

项目一

jsonp

$(".send_jsonp").click(function() {

$.ajax({

url:"",

success:function(data) {

console.log(data)

}

})

});functionfunc(arg) {

console.log(arg)

}

项目二:

defajax_send2(request):importjsonprint(222222)#return HttpResponse("func(\'name\')")

s = {"name":"dylan","age":18}#return HttpResponse("func(\'name\')")

return HttpResponse("func(\'%s\')"%json.dumps(s))#返回一个func()字符串,正好自己的ajax里面有个func函数,就去执行func函数了,arg就是传的形参

这回访问项目一就取到值了:

006b47f48da940be8796a82cf842bd9b.jpg

这其实就是JSONP的简单实现模式,或者说是JSONP的原型:创建一个回调函数,然后在远程服务上调用这个函数并且将JSON 数据形式作为参数传递,完成回调。

将JSON数据填充进回调函数,这就是JSONP的JSON+Padding的含义。

2. jQuery对JSONP的实现:

项目一:

4e105aa2bbb2496182b3ed122a1a01da.jpg

e6b6f42184e74c0ea1eadcd73b66b3a3.jpg

from flask importFlaskfrom flask importrender_template,redirect,request,jsonify

app= Flask(__name__)

@app.route("/p1",methods=[\'POST\',\'GET\'])defp1():return render_template(\'p1.html\')if __name__ == \'__main__\':

app.run(host=\'127.0.0.1\',port=80)

p1.py

p1.html:

项目一

jsonp

$(".send_jsonp").click(function() {

$.ajax({

url:"http://127.0.0.1:8080/ajax_send2",//去请求项目二中的url

dataType:"jsonp",

jsonp:\'callbacks\',

success:function(data) {

console.log(data)

}

})

});{##}

jsonp: \'callbacks\'就是定义一个存放回调函数的键,jsonpCallback是前端定义好的回调函数方法名\'SayHi\',server端接受callback键对应值后就可以在其中填充数据打包返回了;

jsonpCallback参数可以不定义,jquery会自动定义一个随机名发过去,那前端就得用回调函数来处理对应数据了。利用jQuery可以很方便的实现JSONP来进行跨域访问。

注意 JSONP一定是GET请求

项目二:p2.py

from flask importFlaskfrom flask importrender_template,redirect,request,jsonify

app= Flask(__name__)

@app.route("/ajax_send2",methods=[\'POST\',\'GET\'])defajax_send2():importjsonprint(222222)#return HttpResponse("func(\'name\')")

s = {"name":"dylan","age":18}#return HttpResponse("func(\'name\')")

callbacks = request.values.get("callbacks") #注意要在服务端得到回调函数名的名字

printcallbacksreturn "%s(\'%s\')" %(callbacks, json.dumps(s))if __name__ == \'__main__\':

app.run(host=\'0.0.0.0\',port=8080)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值