JAVA与AJAX跨域执行

问题来源:一个jsp页面上有个链接需要访问第三方接口,第三方并返回数据给我。

问题思路:首先思考的就是使用AJAX异步方式将他所需的数据给第三方接口,第三方接口返回一系列参数,并根据SUCCESS参数,在页面上弹框显示。

过程解析:页面上写完整AJAX返回JSON数据发现不管怎么样都执行error,经过一系列的查找找到问题所在为AJAX跨域获取数据只能用JSONP,(伤心,看了API才明白是怎么回事),贴下代码:

JSP页面:

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<script type="text/javascript" src="common/jquery-1.6.min.js"></script>
	<script type="text/javascript" >
  	function insert(){
		$.ajax({
			type:"GET",
			url:"http://10.40.114.59:8090/test/test.action",
			dataType:"jsonp",
			jsonp:"callbackParam",
 			jsonpCallback:"success_jsonCallback",
			success:function(json){
				alert(json);
				alert("success");
			},
			error:function(){
				alert("error");
			}
		});
  	}
  </script>
  </head>

  <body>
    <br/>
    <input type="button" value="测试" onclick="insert()"/>
  </body>

</html>

Servlet代码:

<servlet>
  	<servlet-name>test</servlet-name>
  	<servlet-class>test.ReceiveformAction</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>test</servlet-name>
  	<url-pattern>*.action</url-pattern>
  </servlet-mapping>

JAVA代码:

package test;

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

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

import org.json.JSONException;
import org.json.JSONObject;

public class ReceiveformAction extends HttpServlet{

	public void doGet(HttpServletRequest request,HttpServletResponse response) {

		try {

			PrintWriter out = response.getWriter();
			String callbackName = request.getParameter("callbackParam");
			HashMap<String,String> hMap = new HashMap<String,String>();
			hMap.put("success", "true");
			out.write(callbackName+"("+JSONObject.valueToString(hMap).toString()+")");

		} catch (IOException e) {
			e.printStackTrace();
		} catch (JSONException e) {
			e.printStackTrace();
		}

	}

}

抓包截图:

返回数据:

时间: 2024-10-12 08:08:14

JAVA与AJAX跨域执行的相关文章

Java:ajax跨域问题

跨域特性: 是浏览器做出的跨域限制 跨域:请求不是本域的,协议.域名.端口,任何一个不一样,浏览器就会认为跨域 跨域只针对XHR(xmlhttprequest)请求,看下面的type 根据特性一解决: chrome --disable-web-security --user-data-dir   或者   就可以了 JSONP(JSON with Padding): 请求实例: url: 'xxxx:423.5.25/xxx/dfsaf' dataType: 'jsonp' 浏览器会不当做xhr

ajax跨域往php程序post数据时,php程序总是执行两次的解决方法

php程序是部署在IIS7上面,ajax提交数据时,遇到了两个问题,一个就是跨域,一个php程序总会被执行两次. 第一个问题的解决方法,是百度出来的,添加下面几行代码就可以了: header('Access-Control-Allow-Origin:*'); header("Access-Control-Allow-Headers: x-requested-with,content-type"); header('Access-Control-Allow-Methods: OPTION

ajax跨域请求(java处理)

今天碰到了一个ajax跨域问题.前端页面与后端页面由于是部署到不同的服务器,普通的ajax请求不到.需要处理一下.前端代码: $.getJSON("http://192.168.13.132/a/rogdsoftgame/delGz?jsoncallback=callback",$('#formAdd').serialize(), function (data) {     alert('提交成功,谢谢'); }); 后台java(springMvc框架) @RequestMappin

Ajax 跨域请求 jsonp获取json数据

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

浅析JSONP-解决Ajax跨域访问问题

浅析JSONP-解决Ajax跨域访问问题 很久没有写随笔了,总是感觉没时间,其实时间就是...废话少说,前几天,工作上有一新需求,需要前端web页面异步调用后台的Webservice方法返回信息.实现方法有多种,本例采用jQuery+Ajax,完成后,在本地调试了一切ok,但是部署到服务器上以后就出现问题了,后台服务调用没有响应,怎么回事?代码没怎么改动,唯一修改的地方就是jQuery的ajax方法中的url地址.难道是这里的问题,经过检查和调试,发现原来是同源策略在作怪,我们知道,JavaSc

ajax跨域问题解决方案

今天来记录一下关于ajax跨域的一些问题.以备不时之需. 跨域 同源策略限制 同源策略阻止从一个域上加载的脚本获取或操作另一个域上的文档属性.也就是说,受到请求的 URL 的域必须与当前 Web 页面的域相同.这意味着浏览器隔离来自不同源的内容,以防止它们之间的操作. 解决方式 通常来说,比较通用的有如下两种方式,一种是从服务器端下手,另一种则是从客户端的角度出发.二者各有利弊,具体要使用哪种方式还需要具体的分析. 服务器设置响应头 服务器代理 客户端采用脚本回调机制. 方式一 Access-C

Ajax跨域与解决方案

1.同步交互与异步交互 同步交互:用户在URL地址输入http://www.baidu.com,服务器接收请求并进行相应处理,此时用户无法操作,只能等待,只有当返回数据到客户端的时候,用户才能继续操作异步交互:用户操作某个页面,请求某个数据,客户可以继续操作(服务器返回数据),不涉及到整个页面的刷新 2.XmlHttp XmlHttp是一套可以在Javascript.VbScript.Jscript等脚本语言中通过http协议传送或从接收XML及其他数据的一套API.XmlHttp最大的用处是可

关于ajax跨域

众所周知,ajax是不允许跨域访问的,但是有的时候我们又需要用到ajax跨域. 其实ajax跨域区分是很严格的,例如同一个服务器,就算端口不一样这也算是跨域. 解决ajax跨域有三个方法: 1.设置响应头.设置在允许跨域的服务器.setHeader  每一个代码都需要设置. 2.设置代理.通过代理实现跨域. 3.JSONP   JSON with padding   用script包裹 只能用get方法提交,不是真正的ajax方法.通过创建script方法跨域,返回一段可以执行的JS代码. /*

深入浅出JSONP:解决AJAX跨域问题

本文主要讲解了如何去解决AJAX跨域的问题,从跨域的简单原理到JONP实现模式详细的讲解整个解决方案,最后利用jQuery可以很方便的实现JSONP来进行跨域访问. 上周客户新买了服务器,原本在旧的服务器上放着客户的Web主页信息和一个后台程序(asp.net),在客户的主页中有一个动态显示最新消息的处理,这个处理就是通过ajax异步从那个后台程序中取得的.由于又购买了新的服务器,客户想把web主页和那个后台程序分开来,后台程序被部署到了新的服务器上.不过这个项目是我的同事小福同志开发的,也就由