`

wap网站开发之解决Ajax跨域获取json数组的问题

    博客分类:
  • wap
阅读更多

最近在写一个 wap 网站,它是由服务器端提供一个接口,如:

http://192.168.1.122:8080/waptest1/indexImg.do

然后由在jsp页面中解析json数组并获得相应属性值。

等到了正式环境下我把 url 换成远程的 http://mobile.51bi.com/indexImg.do (见上传图片附件)

jsp 就访问不到数据了,我上网查了一下是 Ajax 跨域访问的问题。

解决:先通过 servlet 取出数据再交给 jsp,通过servlet中转了一下。

jsp代码:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<base href="<%=basePath%>">
<title>My JSP 'mlkindex.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">
<link rel="stylesheet" type="text/css" href="css/mlkindex.css">
<script type='text/javascript' src='js/jquery-latest.js'></script>
<script type="text/javascript">
var url="<%=request.getContextPath()%>/MlkIndexServlet ";
var curIndex=0;
var arr=new Array();
$(function() {
$.post(url,function(data){
var json=eval("(" + data + ")");
for(var i=0;i<json["indexImg"].length;i++){
var temp=json["indexImg"][i];
arr[i]=temp.picture;
}
var pic='<img onclick="changeImg(this.id);" class="imgs" id="obj" src="'+json["indexImg"][0].picture+'" />';
$("#adimgs").html(pic);
});
});
function changeImg(obj){
var obj=document.getElementById("obj");
if (curIndex==arr.length-1)
{
curIndex=0;
}
else
{
curIndex+=1;
}
obj.src=arr[curIndex];
}
</script>
<script type="text/javascript">
$(function() {
$.post('http://192.168.1.122:8080/waptest1/MlkIndex2Servlet',function(data2){
var json2=eval("(" + data2 + ")");
var cai=json2["shareList"][4].msource;
var nav='<div class="test1"><table border=0 cellpadding=10 cellspacing=0 align="center"><tr>';
nav=nav+'<td><a href="mlk/mlkdetail.jsp?id='+json2["shareList"][0].id+'&msource='+json2["shareList"][0].msource+'&page=1"><img class="imgsize" ';
nav=nav+'src="'+json2["shareList"][0].picture+'"></img></a><br/><font color=#FF66FF>衣衣不舍</font></td>';
nav=nav+'<td><a href="mlk/mlkdetail.jsp?id='+json2["shareList"][1].id+'&msource='+json2["shareList"][1].msource+'&page=1"><img class="imgsize" ';
nav=nav+'src="'+json2["shareList"][1].picture+'"></img></a><br/><font color=#FF66FF>时尚潮包</font></td>';
nav=nav+'<td><a href="mlk/mlkdetail.jsp?id='+json2["shareList"][2].id+'&msource='+json2["shareList"][2].msource+'&page=1"><img class="imgsize" ';
nav=nav+'src="'+json2["shareList"][2].picture+'"></img></a><br/><font color=#FF66FF>最in美鞋</font></td>';
nav=nav+'</tr>';
nav=nav+'<table border=0 cellpadding=10 cellspacing=0 align="center"><tr>';
nav=nav+'<td><a href="mlk/caizhuang.jsp?id='+json2["shareList"][3].id+'&page=1"><img class="imgsize" ';
nav=nav+'src="'+json2["shareList"][3].picture+'"></img></a><br/><font color=#FF66FF>美妆护肤</font></td>';
nav=nav+'<td><a href="mlk/mlkdetail.jsp?page=1&id='+json2["shareList"][4].id+'&msource='+json2["shareList"][4].msource+'&page=1"><img class="imgsize" ';
nav=nav+'src="'+json2["shareList"][4].picture+'"></img></a><br/><font color=#FF66FF>诗意家居</font></td>';
nav=nav+'<td><a href="mlk/mlkdetail.jsp?id='+json2["shareList"][5].id+'&msource='+json2["shareList"][5].msource+'&page=1"><img class="imgsize" ';
nav=nav+'src="'+json2["shareList"][5].picture+'"></img></a><br/><font color=#FF66FF>甜美饰物</font></td>';
nav=nav+'</tr></div>';
$("#mlknav").html(nav);
});
});
</script>
</head>
<body>
<div class="head3">
<div class="head1">
<div class="back1"><input type="submit" value="返回" onclick="javascript :history.go(-1);"></div>
<div class="mlkicon"><a href="#"><img src="images/mlkindex/logo.jpg"/></a></div>
</div>
<!-- 四张轮换图片 -->
<div class="head2">
<div id="adimgs"></div>
</div>
</div>
<!--美丽控首页六张导航图片 -->
<div id="mlknav">
</div>
</body>
</html>

****************************************************

servlet代码:

注: 此处亦可参照本人的这篇文章: http://chenzheng8975.iteye.com/blog/1602301

package mlk.test.controller;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.URL;

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


public class MlkIndexServlet extends HttpServlet {

/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
URL url = new URL("http://mobile.51bi.com/indexImg.do ");
InputStream is = url.openStream();
byte[] b = new byte[is.available()];
is.read(b);
String resultString=new String(b, "utf-8");
String tempString=new String(resultString.getBytes("iso-8859-1"),"utf-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
System.out.println(resultString);
out.print(resultString);
is.close();
}

/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

this.doGet(request, response);
}

}

  • 大小: 112.7 KB
分享到:
评论

相关推荐

    Ajax +jquery跨域获取JSON

    这里的"Ajax + jQuery跨域获取JSON"是一个典型的Web开发技术应用场景,主要用于解决Web应用程序中不同源之间的数据共享问题。在本案例中,开发者成功地实现了跨域请求以获取JSON数据,并将这些数据用于展示天气预报...

    利用JQuery jsonp实现Ajax跨域请求json数据

    通过在客户端设置`dataType: 'jsonp'`和`jsonp: 'callback'`,然后在服务器端根据请求的回调函数参数构建响应,我们可以实现Ajax跨域获取JSON数据。无论是在.Net的`.handler`还是WebService中,这一过程都是相似的,...

    解决ajax跨域问题

    ### 解决Ajax跨域问题 在现代Web开发中,跨域问题经常出现并困扰着开发者。根据提供的文件信息,本文将详细介绍如何通过JSONP等方法解决Ajax跨域问题。 #### Ajax与同源策略 首先,我们需要了解为什么会出现跨域...

    使用Jsonp方式跨域获取json

    综上所述,JSONP是解决跨域问题的一种传统手段,虽然现在有CORS等更安全的解决方案,但在某些情况下,尤其是需要兼容老版本浏览器或者无需POST请求时,JSONP仍然是一个实用的选择。在实际项目中,了解和掌握JSONP的...

    解决ajax跨域请求问题

    在Web开发中,Ajax(Asynchronous JavaScript and XML)技术被广泛用于实现页面的异步更新,使得用户无需刷新整个页面就能获取和提交数据。然而,跨域请求是Ajax的一个常见问题,由于浏览器的同源策略限制,Ajax请求...

    ajax跨域获取数据

    在Web开发中,由于浏览器的同源策略限制,JavaScript通常无法直接从一个域名下通过Ajax方式获取另一个...了解并掌握这些知识点,将有助于你在开发中有效解决跨域获取数据的问题,提升用户体验,实现更高效的数据交互。

    jquery跨域获取json

    总结来说,"jquery跨域获取json"是一个关于JavaScript编程和jQuery库如何通过JSONP技术解决跨域获取数据的问题。在实际开发中,了解并掌握这一技术对前端开发者尤其重要,因为很多API和数据服务都是部署在不同的域名...

    ajax跨域 返回json

    实现jquery ajax跨域。前台页面 和 java代码类

    Ajax跨域访问解决方案

    本篇将详细介绍如何解决Ajax跨域访问的问题。 1. **什么是同源策略** 同源策略是浏览器为了保护用户安全而实施的一项安全策略,它限制了来自不同源的“文档”或脚本对彼此的交互。在没有明确许可的情况下,...

    web前端跨域取JSON

    2. **JSONP(JSON with Padding)**:JSONP是早期解决跨域问题的一种方式,它利用了`&lt;script&gt;`标签可以跨域加载资源的特性。服务器返回的不再是JSON数据,而是包含一个JavaScript函数调用,函数名由客户端指定,参数...

    jQuery使用ajax跨域获取数据

    jQuery使用ajax跨域获取数据

    ajax跨域解决办法

    AJAX跨域问题的出现是由于浏览器的安全机制,旨在防止恶意网站通过脚本访问其他网站的数据,保护用户隐私。但是,在某些场景下,比如前后端分离的应用、API接口调用等,跨域请求是必要的。针对这一需求,有多种解决...

    解决ajax不能访问本地文件问题(利用js跨域原理)

    为了解决跨域问题,JavaScript提供了一些机制,比如JSONP(JSON with Padding)和CORS(Cross-Origin Resource Sharing)。 JSONP是一种古老的跨域方法,它利用了`&lt;script&gt;`标签可以跨域加载资源的特性。JSONP的...

    JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码

    在Web开发中,由于浏览器的安全策略,JavaScript通常不能直接进行跨域请求,但jQuery提供了$.ajax和$.getJSON方法,通过JSONP(JSON with Padding)技术来实现在不同源之间获取JSON数据。下面将详细介绍如何使用...

    Javascript跨域和Ajax跨域解决方案

    JavaScript跨域和Ajax跨域是Web开发中常见的问题,尤其在进行前后端分离或API调用时,由于浏览器的同源策略限制,不同域名、协议或端口的资源请求会被阻止,这就是所谓的“跨域”。本文将深入探讨JavaScript和Ajax...

    Ajax跨域问题及其解决方案.docx

    ### Ajax跨域问题及其解决方案 #### 一、Ajax跨域问题概述 在现代Web开发中,前后端分离架构越来越流行。这种模式下,前端页面与后端服务通常部署在不同的服务器上,甚至可能位于不同的域名下。当浏览器发起对不同...

    ajax跨域问题的解决办法

    ajax跨域问题的解决办法 ajax跨域问题是指在使用ajax技术时遇到的跨域限制问题,即ajax请求不能跨域访问其他域的服务器资源。这种限制是由于浏览器的同源策略所引起的,同源策略规定一个域下的脚本只能访问该域下的...

Global site tag (gtag.js) - Google Analytics