跨域问题

浏览器同源政策--阮一峰

浏览器跨域访问解决方案

JSONP(JSON with Padding),用来解决跨域问题的另一种解决方案,需要服务器端的支持。

模拟JSONP原理

jsp

把jsp函数执行

使用?号代替方法名



代码具体实现

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

<button id="btn">JSONP</button>

<script src="/static/js/jquery-1.11.3.min.js"></script>
<script>
    $(function(){
        $("#btn").click(function(){

            $.getJSON("/jsonp?method=?").done(function(data){
                alert(data.username + " -> " + data.address);
            }).error(function(){
                alert("服务器异常");
            });

        });
    });
</script>



<%--<script>
    function callback(user) {
        alert("hello," + user.username);
    }
</script>
<script src="/jsonp?method=callback"></script>--%>
</body>
</html>
package com.kaishengit.web;

import com.google.gson.Gson;
import com.kaishengit.entity.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/jsonp")
public class JSONPServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String method = req.getParameter("method");

        User user = new User(1001,"Jack","北京");
        String json = new Gson().toJson(user);

        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=UTF-8");

        PrintWriter out = resp.getWriter();
        out.print(method + "("+json+")"); // callback({id:xx,username:xxx})
        out.flush();
        out.close();


    }
}

有道

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<input type="text" id="word"> <button id="btn">翻译</button>
<div id="result"></div>
<script src="/static/js/jquery-1.11.3.min.js"></script>
<script>
    $(function(){
        $("#btn").click(function () {
            $("#result").html("");

            var word = $("#word").val();
            var url = "http://fanyi.youdao.com/openapi.do?keyfrom=*****************&key=1587754017&type=data&doctype=jsonp&callback=?&version=1.1&q="+word;
            $.getJSON(url).done(function(data){
                var array = data.basic.explains;
                for(var i =0;i< array.length;i++) {
                    $("<p></p>").text(array[i]).appendTo($("#result"));
                }
            }).error(function(){
                alert("服务器异常");
            });

        });
    });
</script>
</body>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 浏览器在请求不同域的资源时,会因为同源策略的影响请求不成功,这就是通常被提到的“跨域问题”。作为前端开发,解决跨域...
    SCQ000阅读 7,457评论 1 52
  • 大家好,我是IT修真院深圳分院第04期学员,一枚正直善良的web程序员。 今天给大家分享一下,修真院官网 js任务...
    仿佛锋阅读 4,247评论 0 1
  • 1. 什么是跨域? 跨域一词从字面意思看,就是跨域名嘛,但实际上跨域的范围绝对不止那么狭隘。具体概念如下:只要协议...
    他在发呆阅读 4,216评论 0 0
  • 跨域 前端 本人技术小菜鸟一枚~写技术博客旨在记录做项目过程中遇到的一些常见问题以及解决方案,为了方便以后查找,并...
    葛高召阅读 3,511评论 0 0
  • 1. 什么是跨域? 跨域一词从字面意思看,就是跨域名嘛,但实际上跨域的范围绝对不止那么狭隘。具体概念如下:只要协议...
    稍纵即逝_e5e9阅读 1,531评论 0 0

友情链接更多精彩内容