笔记-Ajax[4]-JSONP跨域获取数据。

JS的跨域:跨域名获取数据,a域名获取b域名中的数据。

解决跨域获取数据的方法也叫JSONP(JSON and Padding)

JSONP方法:

1:服务器代理:XMLHttpRequest代理文件
2:script标签:jsonp(常用);//利用script标签的src引入外部文件的功能,src能够引入任何的文件的类型
3:location.hash方式:iframe
4:window.name方式
5:flash方式
6:html5的postMessage方式

例子:百度输入数据下拉框提示功能

布局代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<link rel="stylesheet" href="css/index.css" type="text/css" />
<script type="text/javascript" src="js/index.js"></script>
</head>

<body>
<input type="text" id="content"/>
<ul id="lists">
</ul>
</body>
</html>

css代码:

#content{width:300px;height:40px;line-height:40px;border:1px solid #ccc;font-size:16px;}
#lists{margin:0px;list-style:none;padding:0px;border:1px solid #ccc;width:300px;display:none;}
#lists li a{display:block;width:300px;height:35px;line-height:35px;font-size:14px;text-decoration:none;
color:#C60;
}
#lists li a:hover{background:#ccc;}

javascript代码:

// JavaScript Document
function getData(data){
    var oUl=document.getElementById("lists");
    var listContents="";
    if(data.s.length){
            oUl.style.display="block";
            for(var i=0;i<data.s.length;i++){
                listContents+="<li><a href=‘http://www.baidu.com/#wd="+data.s[i]+"&rsv_bp=0&tn=baidu&rsv_spt=3&ie=utf-8&rsv_sug3=4&rsv_sug4=361&rsv_sug1=4&f=3&rsp=0&inputT=3257‘ target=‘_blank‘>"+data.s[i]+"</a></li>";
            }
            oUl.innerHTML=listContents;
    }else{
        oUl.style.display="none";
    }
}
window.onload=function(){
    var oContent=document.getElementById("content");
    var oUl=document.getElementById("lists");
    oContent.onkeyup=function(){
            if(this.value!=""){
                var oScript=document.createElement("script");
                oScript.src="http://suggestion.baidu.com/su?wd="+this.value+"&cb=getData";
                document.getElementsByTagName(‘head‘)[0].appendChild(oScript);
            }else{
                oUl.style.display="none";
            }
    }
}

效果:

笔记-Ajax[4]-JSONP跨域获取数据。

时间: 2024-12-25 17:36:40

笔记-Ajax[4]-JSONP跨域获取数据。的相关文章

asp.net MVC jsonp跨域获取数据

public class JsonpResult : JsonResult { object _data = null; public JsonpResult() { } public JsonpResult(object data) { this._data = data; } public override void ExecuteResult(ControllerContext context) { if(context != null) { HttpResponseBase respon

ajax 跨域获取数据jsonp使用

昨天帮同事从其他服务器传过来的json数据进行处理,遇到该问题.开始我的思路是用ajax直接请求把数据弄出来就OK了,然而出错了.原因是我使用的ajax 返回类型为json,默认ajax阻止跨服获取数据的.结合其他博文,ajax的dataType使用jsonp来解决此问题.开始觉得jsonp与json的使用类似,一步步的写着代码,如下: $.ajax({ type:'get', async:false, url:'http://112.11.131.238/nanhunongjing/GetCo

jquery的ajax和getJson跨域获取json数据

原文:http://www.cnblogs.com/yqskj/archive/2013/06/12/3133247.html 很多开发人员在使用jquery在前端和服务器端进行数据交互,所以很容易会认为在前端利用jquery就可以读取任何站点的数据了.近日在进行开 发时,因为要和第三方公司的一个项目进行数据的共享,因为考虑多不占用服务器的资源,遂决定直接在html进行数据的读取,不走服务器端进行中转了.然后 正好就遇到了浏览器端跨域访问的问题. 跨域的安全限制都是指浏览器端来说的,服务器端不存

【转载1】jquery的ajax和getJson跨域获取json数据

目前浏览器端跨域访问常用的两种方法有两种: 1.通过jQuery的ajax进行跨域,这其实是采用的jsonp的方式来实现的. jsonp是英文json with padding的缩写.它允许在服务器端生成script tags至返回至客户端,也就是动态生成javascript标签,通过javascript callback的形式实现数据读取. html代码: 1 $(function(){ 2 3 $("#ww").click(function(){ 4 5 $.ajax({ 6 ty

使用图片跨域方式获取图片数据 使用 jsonp 方式跨域获取数据

使用图片跨域方式获取图片数据 server.get(`/mockImg`, (req, res, next) => { // 使用图片跨域方式获取图片数据 req.headers.origin && res.setHeader(`Access-Control-Allow-Origin`, req.headers.origin) res.setHeader(`content-type`, `image/gif`) res.setHeader(`data`, `image/gif`) v

XMLHTTPRequest对象不能跨域获取数据?!

写了一小段代码,是用XMLHTTPRequest对象来获取数据的,在本地服务器中,运行的很顺利,但是转向实际服务器(实质上就是转向http://gumball.wickedlysmart.com获取一个json文件过来),运行就跑不起来了. 这就涉及到跨域获取数据的问题了. 我运行时的环境是这样的: 本地服务器运行当前代码.转向http://gumball.wickedlysmart.com获取一个json文件过来. 结果:报错. XMLHttpRequest cannot load   No

利用window.name+iframe跨域获取数据详解

详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.iframe是html的一个标签,可以在网页中创建内联框架,有个src属性(指向文件地址,html.php等)可以选择内联框架的内容,可以看个例子(猛戳这里),大概了解下就行了.window.name(一般在js代码里出现)的值不是一个普通的全局变量,而是当前窗口的名字,这里要注意的是每个iframe都有包

使用JSONP跨域请求数据

下面代码,可以使用JSONP进行跨域请求数据,Insus.NET记录以下,以备忘记. 使用JSONP跨域请求数据

NodeJS express跨域获取数据

这几天一直在研究NodeJS跨域获取数据的事情,然后找到了一个好用的模块request. 一.先把咱们的主要模块引用进来: 这里我使用的是express var express = require('express');var router = express.Router();var request = require('request');request需要安装,方法为:npm install ––save request 二.路由部分 router.get('/',function(req