ajax跨域请求--jsonp实例

ajax请求代码:

//区域事件选择配送点
function changeDistrict(value){
	 if(value == 0){
    	 $('#transport_node').empty();
    	 $('#transport_node').append('<option value="0">请选择</option>');
    	 return;
	 }
	 $('#transport_node').empty();
	 $('#transport_node').append('<option value="0">加载中...</option>');
	 $.ajax({
         type: 'GET',
         url: "http://192.168.33.114:8080/UIDTraceAdmin/transportnode/pagelist/jsonp?callbackFunction=jsonpCallback",
         async: false,
         dataType: "jsonp",
         jsonp: "jsonpCallback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
         success: function(o){},
         timeout:3000
     });
 }

function jsonpCallback(result) {
	 if(result.success == true){
    	 $('#transport_node').empty();
    	 $('#transport_node').append('<option value="0">请选择</option>');
         $.each(result.transportList, function(i, n){
	       	 var html = '<option value="'+n.nodeId+'">'+n.transportnodeName+'</option>';
             $('#transport_node').append(html)
         });
      }else{
       	 $('#transport_node').empty();
       	 $('#transport_node').append('<option value="0">请选择</option>');
      }
}  

要点:

1.url中的请求参数callbackFunction=jsonpCallback这是服务器响应返回后调用的javascript方法的名称

2.dataType要为jsonp

跨域服务器处理代码:

@RequestMapping("/pagelist/jsonp")
	public void pagelist(@ModelAttribute TransportNode node,HttpServletRequest httpReq,
			HttpSession session,HttpServletResponse response) {

		//返回头部设置
        response.setHeader("Pragma", "No-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setHeader("Content-type", "application/x-javascript;charset=utf-8");
        response.setDateHeader("Expires", 0);  

        String jsonpCallback = httpReq.getParameter("callbackFunction");//jsonp回调函数名
        JSONObject resultJson  = new JSONObject();
        PrintWriter out = null;
		try {
			out = response.getWriter();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		try {
			node.setRowStart((node.getPage() - 1) * node.getRows() + 1);
			node.setRowEnd(node.getPage() * node.getRows());

			resultJson.put("transportList", JsonUtils.toJSONList(business.getList(node)));
			resultJson.put("success", true);
		    System.out.println(resultJson.toString());
	        out.println(jsonpCallback+"("+resultJson.toString()+")");//返回jsonp格式数据
	        out.flush();
	        out.close();  

		} catch (Exception e) {
			LogWriter.log("/pagelist/jsonp",e);
			try {
				resultJson.put("success", false);
			} catch (JSONException e1) {
				e1.printStackTrace();
			}
		    out.println(jsonpCallback+"("+resultJson.toString()+")");//返回jsonp格式数据
	        out.flush();
	        out.close();
		}

注意要点:

1.设置响应报文头,response.setHeader("Content-type", "application/x-javascript;charset=utf-8");,消除了"Resource interpreted as Script but transferred with MIME type text/plain",同时要根据自己的编码格式设置正确的编码;

2.jsonp的数据格式是:jsonpCallback+"("+resultJson.toString()+")"

举个例子:

jsonpCallback({

"code": "aaa",

"price": 1780,

"tickets": 5

});

ajax跨域请求--jsonp实例

时间: 2024-10-27 00:30:19

ajax跨域请求--jsonp实例的相关文章

Ajax 跨域请求 jsonp获取json数据

遇到Ajax的跨域请求出问题 找了中解决办法如下: 参考内容:http://justcoding.iteye.com/blog/1366102 由于受到浏览器的限制,该方法不允许跨域通信.如果尝试从不同的域请求数据,会出现安全错误.如果能控制数 据驻留的远程服务器并且每个请求都前往同一域,就可以避免这些安全错误.但是,如果仅停留在自己的服务器上,Web 应用程序还有什么用处呢?如果需要从多个第三方服务器收集数据时,又该怎么办? 理解同源策略 同源策略阻止从一个域上加载的脚本获取或操作另一个域上的

ajax跨域请求操作实例

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>JS</title> <style> #box{ width:600px; height:200px; padding:20px; border:1px solid #999; } </style> </head> <

【跨域请求】Ajax跨域请求JSONP

前两天被问到ajax跨域如何解决,还真被问住了,光知道有个什么jsonp,迷迷糊糊的没有说上来.抱着有问题必须解决的态度,我看了许多资料,原来如此... 为何一直知道jsonp,但一直迷迷糊糊的不明白呢?--网上那些介绍资料都写的太复杂了! 我是能多简单就多简单,争取让你十分钟看完! 1. 同源策略 ajax之所以需要"跨域",罪魁祸首就是浏览器的同源策略.即,一个页面的ajax只能获取这个页面相同源或者相同域的数据. 如何叫"同源"或者"同域"

AJAX 跨域请求 - JSONP

Asynchronous JavaScript and XML (Ajax ) 是驱动新一代 Web 站点(流行术语为 Web 2.0 站点)的关键技术.Ajax 允许在不干扰 Web 应用程序的显示和行为的情况下在后台进行数据检索.使用 XMLHttpRequest 函数获取数据,它是一种 API,允许客户端 JavaScript 通过 HTTP 连接到远程服务器. 不过,由于受到浏览器的限制,该方法不允许跨域通信.如果尝试从不同的域请求数据,会出现安全错误.如果能控制数 据驻留的远程服务器并

PHP AJAX JSONP实现跨域请求使用实例

在之前我写过“php返回json数据简单实例”,“php返回json数据中文显示的问题”和“在PHP语言中使用JSON和将json还原成数组”.有兴趣的童鞋可以看看 今天我写的是PHP AJAX JSONP使用的实例.不清楚jsonp是什么的请自己搜索 实例1 test.html <!doctype html> <html> <head> <meta charset="utf-8"> <title>test</title

JQuery的Ajax跨域请求原理概述及实例

今天在项目中需要做远程数据加载并渲染页面,直到开发阶段才意识到ajax跨域请求的问题,隐约记得Jquery有提过一个ajax跨域请求的解决方式,于是即刻翻出Jquery的API出来研究,发 JQuery对于Ajax的跨域请求有两类解决方案,不过都是只支持get方式.分别是JQuery的 jquery.ajax jsonp格式和jquery.getScript方式. 什 么是jsonp格式呢?API原文:如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用jsonp类型

使用jsonp实现ajax跨域请求

Jsonp(JSON with Padding)是资料格式 json 的一种“使用模式”,可以让网页从别的网域获取资料. 由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的<script> 元素是一个例外.利用 <script> 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就是所谓的 JSONP.用 JSONP 抓到的资料并不是 JSON,

jsonp其实很简单【ajax跨域请求】

前两天被问到ajax跨域如何解决,还真被问住了,光知道有个什么jsonp,迷迷糊糊的没有说上来.抱着有问题必须解决的态度,我看了许多资料,原来如此... 为何一直知道jsonp,但一直迷迷糊糊的不明白呢?——网上那些介绍资料都写的太复杂了! 我是能多简单就多简单,争取让你十分钟看完! 1. 同源策略 ajax之所以需要“跨域”,罪魁祸首就是浏览器的同源策略.即,一个页面的ajax只能获取这个页面相同源或者相同域的数据. 如何叫“同源”或者“同域”呢?——协议.域名.端口号都必须相同.例如: ht

ajax 跨域请求之jsonp

需求 遇到的问题 解决办法 需求 今天项目需要访问一个外部链接获取数据,是跨域的.使用ajax 请求一直提示: 遇到的问题 1. 如何使用ajax 跨域请求数据 2. 能不能post请求 解决办法 经过网上查找资料,能使用jsonp请求跨域数据. jsonp请求数据只能get,不支持post跨域请求 使用方法,见代码: $.ajax({ type: "post",//这里写post也没用,也是get请求 url: "url", dataType: "jso