ajax的跨域请求实现,Ajax-07 基于Ajax实现跨域请求(示例代码)

跨域

跨域名访问,如c1.com域名向c2.com域名发送请求

本质:浏览器存在同源策略机制,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性。

django服务端准备

url.py:

from django.conf.urls import url

from hello import views

urlpatterns = [

url(r\'cors/\', views.cors, name=\'cors\'),

url(r\'jsonp/\', views.jsonp, name=\'jsonp\'),

]

views.py:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

from django.http import HttpResponse

from django.shortcuts import render

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt

def cors(request):

n1 = request.POST.get(\'n1\')

n2 = request.POST.get(\'n2\')

result = int(n1) + int(n2)

response = HttpResponse(result)

response[\'Access-Control-Allow-Origin\'] = "*"

return response

@csrf_exempt

def jsonp(request):

func_name = request.GET.get(\'callback\')

n1 = request.GET.get(\'n1\')

n2 = request.GET.get(\'n2\')

result = int(n1) + int(n2)

temp = "%s(%s)" % (func_name, result)

response = HttpResponse(temp)

return response

实现Ajax跨域请求

a.跨域资源共享(CORS,Cross-Origin Resource Sharing)

执行流程:

服务端

- 设置响应头

客户端

- XmlHttpRequest 直接发送请求

cors.html:

跨域请求

跨域请求

//客户端定义回调函数

functioncall(arg) {

console.log(\'客户端定义回调函数执行:\', arg);

}functionXmlSendRequest() {//创建script标签

vartag=document.createElement(\'script\');//指定src

tag.src= "http://localhost:8000/jsonp/?callback=call&n1=2&n2=4";//添加到head标签中

document.head.appendChild(tag);//删除script标签

document.head.removeChild(tag);

}functionJqSendRequest_1() {

$.ajax({

url:"http://localhost:8000/jsonp/",

data: {\'n1\':22,\'n2\':44},

type:\'POST\',//虽然是POST方式,但是内部会转换成GET请求

dataType:\'jsonp\',

success:function(data, statusText, xmlHttpRequest) {

console.log(\'success 回调执行:\', data);

}

})

}functionJqSendRequest_2() {

$.ajax({

url:"http://localhost:8000/jsonp/",

data: {\'n1\':222,\'n2\':444},

type:\'GET\',//POST 也会自动转换为GET请求

dataType:\'jsonp\',

jsonp:"callback",

jsonpCallback:\'call\',//请求成功返回后,客户端执行call函数

success:function(data, statusText, xmlHttpRequest) {//未指定jsonCallback时,则自定执行方法

console.log(\'success 回调执行:\', data);

}//如上请求如 http://localhost:8000/jsonp/?callback=call&n1=222&n2=444

})

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值