JSONP(JSON with Padding)是一种解决跨域请求的一种技术手段。它通过动态创建 <script> 标签来实现跨域请求。
具体的步骤如下:
在客户端创建一个回调函数,该回调函数用于处理服务器返回的数据。
构造一个包含了回调函数名称的请求,并指定服务器地址和参数。
在客户端动态创建一个 <script> 标签,将服务器地址和参数作为该标签的 src 属性值。同时将回调函数名称作为请求参数传递给服务器。
当服务端接收到请求后,将要返回的数据作为回调函数的参数调用。
客户端接收到数据后,执行回调函数进行数据处理。
需要注意的是,JSONP只支持GET请求,不支持POST请求。
以下是一个简单的示例,演示了JSONP的使用:
// 客户端代码
function handleResponse(response) {
// 处理服务器返回的数据
console.log(response);
}
function sendRequest() {
var script = document.createElement('script');
script.src = 'http://example.com/api?callback=handleResponse';
document.body.appendChild(script);
}
// 服务端代码
function handleRequest(req, res) {
var data = {
message: 'Hello, JSONP!'
};
var callback = req.query.callback;
res.send(callback + '(' + JSON.stringify(data) + ')');
}
在上述示例中,客户端调用 sendRequest
函数时,会动态添加一个 <script> 标签,其 src 属性指向服务端的地址,并通过 callback
参数指定了回调函数的名称。
服务端收到请求时,将要返回的数据包装在回调函数中返回给客户端,客户端接收到数据后会执行回调函数进行数据处理。
这样就实现了跨域请求。