1.什么是JSONP
一般来说,除了HTML脚本元素之外,位于server1.example.com的网页无法与server1.example.com以外的服务器进行通信。有了脚本元素的这种开放策略,Web页面就可以获得其他来源动态生成的JSON数据,这种使用模式被称为JSONP。JSONP捕获的数据不是JSON,而是任意的JavaScript,由JavaScript文字翻译器执行,而不是JSON解析器。
JSONP是解决客户端请求服务器跨域问题的协议,但不是正式的传输协议。该协议的一个关键点是允许用户向服务器传递一个回调参数,然后当服务器返回数据时,回调参数将作为函数名来包装JSON数据,这样客户端就可以自定义自己的函数来自动处理返回的数据。
2.Ajax请求其他域接口
在这个项目中,我想请求另一个第一后台接口来请求数据。呈现页面时,通过ajax加载数据,如下所示:
$.Ajax({ URL : ' http://www . XXX.cn/Lala la?method=10082page=1pageSize=10 ',type: 'GET ',dataType: 'json ',timeout: 5000,content type : ' application/JSON;charset=utf-8 ',success : function(result){ alter(' AAAA ');} });这将导致跨域错误,如下所示:
请求的资源上不存在“访问控制-允许-来源”标头。因此,不允许访问原点“null”。响应的HTTP状态代码为500。
这里说不允许跨域请求,那怎么办?请改用jsonp。字段数据类型已更改。
$.Ajax({ URL : ' http://www . XXX.cn/Lala la?method=10082page=1pageSize=10 ',type: 'GET ',dataType: 'jsonp ',timeout: 5000,content type : ' application/JSON;charset=utf-8 ',success : function(result){ alter(' AAAA ');} });结果:意外语法错误:意外标记!
搞什么鬼。
明明请求回数据,结果还是报错了。原因是ajax请求服务器,返回的数据格式不符合jsonp的返回格式,那么jsonp的格式是什么呢?
回调({msg: '这是JSON数据' })这是什么,谁定义的?如果你这样想,似乎你没有仔细阅读第一点。JSON是一种轻量级的数据交换格式,就像xml一样。JSONP是使用JSON数据的一种方式。它不是返回JSON对象,而是一个包含JSON对象的javaScript脚本。但是上面的图片是json字符串,所以是错误的。
3.参数返回处理
有一点你会发现,当你使用jsonp协议进行请求时,除了自己填写的参数之外,参数中还有一个参数叫做callback,如图所示:
看看这个参数是什么,因为我在ajax请求的时候没有指定参数jsonp,所以系统默认的参数名是“callback”。不指定jsonpCallback参数,jquery将生成随机函数名,如上图所示。
例如,我配置如下:
$.Ajax({ URL : ' http://www . XXX.cn/Lala la?方法=10082page=1page size=10 ',type:' get ',datatype3360' jsonp ',jsonp: '回调a ',//传递给请求处理程序或页面。用于获取jsonp回调函数名的参数名(默认为:回调)jsonp回调:' success _ jsonp回调',//自定义jsonp回调函数名,默认为jQuery自动生成的随机函数名超时3360 5000和内容类型: ' application/JSON;charset=utf-8 ',success : function(result){ alter(' AAAA ');} });那么服务器也可以通过以下方法获取回调的函数名:
复制代码如下:字符串回调funname=request.getparameter('回调a ');//获取success _ jsonpCallback字符串
注意:函数名区分大小写。
然后按照下面的格式打包:
字符串回调=request.getParameter('回调');//默认的回调返回回调“(‘JSON STR’)”被包装,不指定函数名,结果不会报告错误。如下所示查看返回的数据:
4.JSONP的执行过程
首先在客户端注册一个回调(比如:‘jsoncallback’),然后将回调的名称(比如:jsonp1236827957501)发送给服务器。注意:服务器获取回调值后,jsonp1236827957501(.)应该用来包含要输出的json内容。此时,服务器生成的json数据可以被客户端正确接收。
然后,用javascript语法生成一个函数,该函数的名称是传递的参数“jsoncallback”的值jsonp1236827957501。
最后,json数据以引用的方式直接放入函数中,从而生成一个js语法文档并返回给客户端。客户端浏览器解析脚本标签并执行返回的javascript文档。此时,javascript文档数据作为参数被传递到客户端预定义的回调函数中(如jquery $)封装的success:函数(json)。上例中的ajax()方法)。
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。