`
wen147258
  • 浏览: 27796 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jsonp跨域请求

阅读更多
前段时间在做产品开发的时候,需要与公司网站那边进行交互,我们所开发的产品上线后是放在一个域名下,公司网站那块是在另一个域名下,这样在页面中调用
网站那边的接口时就存在跨域的问题,当时为了不修改网站那边的接口,所以采用在服务端通过webservice方式进行调用网站接口,问题也很快解决了,当时我就在想
如果需要在js中直接访问的话,就涉及到到跨域的问题,那么怎么做才能解决这个问题呢,我上网找了一些资料,最后采用的是jsonp的方式来解决的。下面我来给大家分享下
用jsonp方式解决跨域问题。分为以下步骤:
1、引入jquery.js,使用$.ajax()来定义jsonp,如下:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<%
	String path = request.getContextPath();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<script type="text/javascript" src="${path}/js/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
	
	$(function(){
		$("#jsonp").click(function(){
			$.ajax({
				url:"/demo/jsonp.action",
				type:"GET",
				async:false,
				dataType:"jsonp",
				jsonp:"jsonpCallback",
				jsonpCallback:"showAge",
				success:function(data){
					//alert(data.name);
				}
				
				
			}
			);
			
		});
		
	});
	function showAge(data){
		alert(data.age);
	}
</script>
</head>
<body>
	<a id="jsonp" href="">使用jsonp</a>
</body>
</html>


2、服务器端处理:
package com.mall.web.action;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.alibaba.fastjson.JSONObject;

@Controller
@RequestMapping("/demo/")
public class DemoAction {
private HttpServletRequest request;
	
	private HttpServletResponse response;
	
	@ModelAttribute
	public void setRequestAndResponse(HttpServletRequest request,HttpServletResponse response){
		
		this.request = request;
		this.response = response;
	}
	
	@RequestMapping(value="jsonp",method=RequestMethod.GET)
	public void jsonp(){
		 try {  
		        response.setContentType("text/plain");  
		        response.setHeader("Pragma", "No-cache");  
		        response.setHeader("Cache-Control", "no-cache");  
		        response.setDateHeader("Expires", 0);  
		        PrintWriter out = response.getWriter();       
		        JSONObject resultJSON = new JSONObject();
		        resultJSON.put("name", "wen");
		        resultJSON.put("age", "17");
		        String jsonpCallback = request.getParameter("jsonpCallback");//客户端请求参数  
		        System.out.println("-------------------->"+jsonpCallback);
		        System.out.println("-------------------->"+resultJSON.toJSONString());
		        out.println(jsonpCallback+"("+resultJSON.toJSONString()+")");//返回jsonp格式数据  
		        out.flush();  
		        out.close();  
		      } catch (IOException e) {  
		       e.printStackTrace();  
		      }  
		
	}
	
}

该访问的url地址为:/demo/jsonp.action?jsonpCallback=“showAge”
在上述事例中,需要注意以下几点:
1、jsonp中只能使用get请求,ajax请求中dataType为jsonp
2、jsonp定义的url地址中的参数名默认为callback
3、jsonpCallback定义的时jsonp定义的参数对应的值,也是服务器需要回调的函数,若jsonpCallback为定义值,默认回调success函数
4、服务器接受请求后,需要返回符合参数传递过来的回调函数如:
out.println(jsonpCallback+"("+resultJSON.toJSONString()+")");//返回jsonp格式数据

以上就是jsonp的访问过程,这里需要大家好好理解。因为使用jsonp跨域访问,需要客户端和服务端定义一个规则,即回调函数的规则,所以
在开发的过程中需要客户端和服务端的开发人员共同定义一个规则。
其实我们还可以通过$.get()和$.getJson()方式来跨域访问,这里就不跟大家细说了,如果感兴趣的朋友,可以自己去了解下,今天就给大家分享到这,
我们下期再见,接下来会为大家分享android的一些知识。
1
0
分享到:
评论

相关推荐

    html通过 ajax jsonp跨域请求接收和传送数据

    **AJAX和JSONP跨域请求的实现过程** 1. **AJAX跨域**: 通常,AJAX请求受到同源策略限制。为实现跨域,我们可以使用CORS(Cross-Origin Resource Sharing)机制。服务器需要在响应头中添加`Access-Control-Allow-...

    jsonpajax跨域请求

    "jsonp跨域请求"可能是服务器返回的示例数据,模拟了JSONP的跨域请求过程。 总结,JSONP和CORS是解决JavaScript跨域问题的两种主要方法,它们各有优缺点,适用于不同的场景。JSONP简单易用,但安全性较低;CORS则更...

    jsonp跨域请求数据实现手机号码查询实例分析.docx

    ### JSONP 跨域请求数据实现手机号码查询实例分析 #### 前言 在现代Web开发中,跨域问题一直是前端开发者面临的一个常见难题。简单来说,由于浏览器的同源策略限制,当一个网页尝试从不同的源(即不同的协议、端口...

    第25周-第06章节-Python3.5-JSONP跨域请求jQuery方式.avi

    第25周-第06章节-Python3.5-JSONP跨域请求jQuery方式.avi

    ajax跨域CORS方案 JSONP跨域请求方案.zip

    JSONP是早期解决跨域问题的手段,适用于只支持GET请求的情况。它的原理是利用HTML的`&lt;script&gt;`标签不受同源策略限制的特性,通过动态创建`&lt;script&gt;`标签来加载服务器返回的JavaScript代码,这个代码通常是一个函数...

    jsonp跨域请求实现示例

    JSONP(JSON with Padding)是一种解决跨域请求的方法,主要用于解决不同域之间因浏览器同源策略限制而无法进行AJAX请求的问题。在AJAX请求中,浏览器的同源策略限制了与当前页面不同域的服务器进行数据交互,而...

    轻松搞定jQuery+JSONP跨域请求的解决方案

    需要注意的是,虽然JSONP提供了一种灵活的跨域请求解决方案,但它也有一些局限性和安全风险。例如,JSONP允许执行任意的JavaScript代码,如果服务器端的输出没有经过严格验证和清洗,可能会导致跨站脚本攻击(XSS)...

    详细解密jsonp跨域请求

    总的来说,JSONP跨域请求是一种古老但有效的方式,用于解决浏览器同源策略带来的限制问题。它的优点是简单易用,支持跨域GET请求。但是,JSONP也有一定的安全风险,比如被恶意利用,因此在使用时需要谨慎。另外,...

    Vue2.0 vue-source jsonp 跨域请求

    在介绍Vue2.0使用vue-resource进行jsonp跨域请求之前,我们需要了解一些基础概念: 1. JSONP(JSON with Padding)是一种老旧的技术,用于绕过浏览器的同源策略。它通过动态创建标签的方式来实现跨域请求。 2. 在...

    详解java 中Spring jsonp 跨域请求的实例

    在Spring框架中处理JSONP跨域请求是一个常见问题,尤其当开发者需要从前端JavaScript代码中调用不同域上的RESTful服务时。由于浏览器的安全限制,同源策略防止了不同域的文档或脚本间的交互,这使得传统的AJAX请求不...

    原生js实现ajax请求和JSONP跨域请求操作示例

    原生js实现ajax请求和JSONP跨域请求操作示例的知识点涉及了Web前端技术中的核心知识点,主要介绍的是如何使用JavaScript原生代码来发起网络请求以及如何处理跨域问题。以下是对给定文件内容中知识点的详细解读: 1....

    jsonp跨域请求详解

    这样做是为了支持JSONP跨域请求。 具体实现中,`writeInternal`方法是被重写的,用于处理HTTP响应的输出。首先,通过`RequestContextHolder`获取到当前的`HttpServletRequest`对象,然后检查请求参数中是否存在`...

    jsonp跨域请求数据实现手机号码查询实例分析

    在实际开发中,实现JSONP跨域请求时需要特别注意以下几点: 1. 确保服务器支持JSONP请求。通常需要服务器端支持输出callback函数名,并对返回数据进行格式化处理。 2. 服务器需要对JSONP请求进行安全校验,避免恶意...

    JSONP跨域实现百度搜索功能(v1.0.0)

    在本项目"JSONP跨域实现百度搜索功能(v1.0.0)"中,我们将深入探讨如何利用JSONP技术来实现在网页上嵌入一个能够进行百度搜索的功能。 首先,我们需要理解为什么需要JSONP。浏览器的同源策略是出于安全考虑,不允许...

    JSONP跨域请求实例详解

    除了JSONP,还有多种跨域请求的方法,如: 1. **IFrame:** 通过嵌入一个IFrame来加载跨域内容,常用于实现页面间的通信。 2. **document.domain:** 同一顶级域名下的子域名可以通过设置`document.domain`来实现跨...

    JSONP跨域请求

    JSONP跨域请求是一种常用的前端技术,用以解决由于浏览器同源策略限制而导致的跨域访问问题。同源策略是指在Web浏览器中,为了保证用户信息的安全,浏览器对脚本能够访问的页面范围进行了限制。一般来说,如果两个...

Global site tag (gtag.js) - Google Analytics