有谁知道json的工作原理json是什么么吗

你不知道的jQuery Item11 -- ajax jsonp跨域方法详解
文章从JSON和JSONP区别开始讲起,用实例来对比他们之间的不同之处,然后详细讲解了jQuery中的ajax jsonp的使用并给出了示例及详细参数说明。
1.JSON和JSONP
  JSON(Script Object Notation)是一种轻量级的数据交换格式,用于在和服务器之间交换信息。
  JSONP(JSON With Padding),就是打包在函数调用中的的JSON(或者包裹的JSON),你要跨域请求别人的东西,你肯定要包裹起来,不要污染了别人的东西,把Json数据包裹起来称为JSONP,个人理解,哈哈~~。
  JSON是一种数据格式,JSONP是一种数据调用方式。
&name&: &肖果平&
callback({
&name&: &小平果&
出于安全考虑,脚本(AJAX)不能访问非本域的内容。但是,静态资源是不受域策略限制的,可以加载任意域的脚本、样式、图片等静态资源,JSOP就是利用这种原理来实现跨域获取数据的。
//定义shoPrice函数,处理返回来的data数据
function showPrice(data) {
alert(&Symbol: & + data.symbol + &, Price: & + data.price);
//在Web页面中包含showPrice函数和参数
&script type="text/javascript"&
function showPrice(data) {
alert("Symbol: " + data.symbol + ", Price: " + data.price);
&script type="text/javascript"&showPrice({symbol: 'IBM', price: 91.42});&/script&
本例展示了如何将静态JSON数据作为参数调用函数。
  第一种的函数调用完全可以写在一个js文件中放在服务器上,用script标签加载到页面,而且这个标签可以动态地创建。
&script type="text/javascript"&
function showPrice(data) {// This is our function to be called with JSON data
alert("Symbol: " + data.symbol + ", Price: " + data.price);
var url = “remote.js”; // 外部脚本的URL
// 动态插入脚本
var script = document.createElement('script');
script.setAttribute('src', url);
// 加载script
document.getElementsByTagName('head')[0].appendChild(script);
remote.js的内容和之前在标签里写的一样是:
showPrice({symbol: 'IBM', price: 91.42});
  动态插入的JavaScript代码,将要传递的JSON数据作为参数,showPrice函数调用语句的参数。
  那么问题来了,每次获取到数据都调用showPrice函数吗?这就需要前后端程序猿做好约定,当然这样有很多不便,尤其是对于开放接口给公众开发的情况。JSOP这样处理:支持前端传递一个回调函数名参数,后端接收回调函数名参数,然后生成对该函数的调用,将JSON数据作为参数传递,在到达客户端时将其插入页面开始执行。
  动态插入代码,带有callback参数:
&script type="text/javascript"&
// This is our function to be called with JSON data
function showPrice(data) {
alert("Symbol: " + data.symbol + ", Price: " + data.price);
var url = “remote.js?callback='showPrice'”; // 外部脚本的URL
// 动态插入脚本
var script = document.createElement('script');
script.setAttribute('src', url);
// 加载script
document.getElementsByTagName('head')[0].appendChild(script);
后端用实现的JSONP服务的代码片段:
$jsonData = getDataAsJson($_GET['symbol']);
echo $_GET['callback'] . '(' . $jsonData . ');';
//这里接收到$_GET['callback'] =showPrice;
// 打印: showPrice({&symbol& : &IBM&, &price& : &91.42&});
很好的契合了JSONP的定义,打包在函数调用中的JSON数据。
如果看晕了,就说简单一点!!!
浏览器是不允许直接跨域请求数据的,jsonp就是利用script标签可以跨域获取数据来工作的
1.建一个函数,这个函数名(如此例中的jsonpCallback是要传给后端的)
&script type="text/javascript"&
function jsonpCallback(result) {
//alert(result);
for(var i in result) {
alert(i+":"+result[i]);//循环输出a:1,b:2,etc.
var JSONP=document.createElement("script");
JSONP.type="text/javascript";
JSONP.src="http://crossdomain.com/services.php?callback=jsonpCallback";
document.getElementsByTagName("head")[0].appendChild(JSONP);
2.新建一个script标签,src指向域名
3.将script插入body中
前端部分就是如此
&&&&&&&&&&&&&
用jquery实现
url: 'http://10.95.192.27:8080/honeybee/zhuanti/export.action',
dataType: &jsonp&,
jsonp: &topicsCallback&,
success: function(){}
jsonp: 即与后端定好的名称。具体的处理函数在success里
2.在jQuery中使用JSONP
  AJAX和JSONP在jQuery中的调用方式看起来极为相像,千万不要被这种现象迷惑,它们本质上有很大不同。AJAX是通过XMLHttpRequest对象获取非页面内容,而JSONP是动态的添加
url: &http://query.yahooapis.com/v1/public/yql&,
jsonpCallback: &showPrice&,
jsonp: &callback&,
// tell jQuery we're expecting JSONP
dataType: &jsonp&,
q: &select title,abstract,url from search.news where query=\&cat\&&,
format: &json&
// work with the response
success: function( data ) {
console.log( data ); // server response
ajax请求参数说明:
dataType String
预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如XML MIME类型就被识别为XML。在1.4中,JSON就会生成一个JavaScript对象,而script则会执行这个脚本。随后服务器端返回的数据会根据这个值解析后,传递给回调函数。可用值:
&xml&: 返回 XML 文档,可用 jQuery 处理。
&html&: 返回纯文本 HTML 信息;包含的script标签会在插入dom时执行。
&script&: 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了&cache&参数。'''注意:'''在远程请求时(不在同一个域下),所有POST请求都将转为GET请求。(因为将使用DOM的script标签来加载)
&json&: 返回 JSON 数据 。
&jsonp&: JSONP 格式。使用 JSONP 形式调用函数时,如 &myurl?callback=?& jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
&text&: 返回纯文本字符串
  重写jsonp请求中的回调函数的名称。用来替代&callback=?&这种GET或POST请求URL参数里的&callback&部分,例如{jsonp:'onJsonPLoad'}会导致&onJsonPLoad&传递给服务器。
jsonpCallback,
  为jsonp指定一个回调函数名。这个值将用来取代jQuery自动生成的随机函数名。这主要用来让jQuery生成度独特的函数名,这样管理请求更容易,也能方便地提供回调函数和错误处理。你也可以在想让浏览器缓存GET请求的时候,指定这个回调函数名。但是实际使用过程中,并不用写回调函数,比如此例中的showPrice,不写也不会报错,因为jQuery在处理JSONP的时候,自动帮你生成回调函数并且把数据取出来共success方法调用。可能像这样:
function success_jsonpCallback(data) { success(data); }
以上就是本文的全部内容了,大家是否对jsonp有了细致的了解了呢。有什么疑问也请给我留言,大家共同探讨。
网上找到一个很好的例子,分享出来,很清楚的对比,自己动手测试了一番。
&script type="text/javascript" src="http://files.cnblogs.com/Zjmainstay/jquery-1.6.2.min.js"&&/script&
&script type="text/javascript"&
当前文件为:http://www.test.com/index.html
$(document).ready(function(){
url:'http://www.wp.com/getData.php',
//跨域到http://www.wp.com,另,http://test.com也算跨域
type:'GET',
//jsonp 类型下只能使用GET,不能用POST,这里不写默认为GET
dataType:'jsonp',
//指定为jsonp类型
data:{"name":"Zjmainstay"},
//数据参数
jsonp:'callback',
//服务器端获取回调函数名的key,对应后台有$_GET['callback']='getName';callback是默认值
jsonpCallback:'getName',
//回调函数名
success:function(result){
//成功执行处理,对应后台返回的getName(data)方法。
$("#myData").html('1、My name is '+result.name+'.I\'m '+result.age+' years old.');
error:function(msg){
alert(msg.toSource());
//执行错误
/* 这里不是跨域 */
url:'http://www.test.com/getData.php',
// url:'http://test.com/getData.php',
//跨域到http://test.com
type:'GET',                    //这里是普通ajax,可以用POST
dataType:'json',
data:{"name":"Zjmainstay"},
success:function(result){
$("#myData").append('2、My name is '+result.name+'.I\'m '+result.age+' years old.');
error:function(msg){
alert(msg.toSource());
//跨域错误会执行到这里
$_GET['name'],
&age&=&23,
echo $_GET['callback'].&(&.json_encode($data).&)&;
//等价:echo 'getName({&name&:&Zjmainstay&,&age&:23})';
文件:(不跨域),同样是(跨域)
$_GET['name'],
&age&=&23,
echo json_encode($data);你所不知道的JSON.parse() 和 JSON.stringify() – 高级用法
JSON对象的两个方法:JSON.parse() 和 JSON.stringify() 通常用做JSON对象和字符串之间的相互转换,这里不再详细介绍
这里介绍一下,我主要介绍一下 JSON.parse() 和 JSON.stringify() 的高级用法,可以在实际应用中给我们带来一些方便。
JSON.parse()
JSON.parse() 可以接受第二个参数,它可以在返回之前转换对象值。比如这例子中,将返回对象的属性值大写:
const user = {
name: 'John',
email: '',
plan: 'Pro'
const userStr = JSON.stringify(user);
const newUserStr = JSON.parse(userStr, (key, value) =& {
if (typeof value === 'string') {
return value.toUpperCase();
console.log(newUserStr); //{name: &JOHN&, email: &&, plan: &PRO&}
注:尾随逗号在JSON 中无效,所以如果传递给它的字符串有尾随逗号,JSON.parse()将会抛出错误。
JSON.stringify()
JSON.stringify() 可以带两个额外的参数,第一个是替换函数,第二个间隔字符串,用作隔开返回字符串。
value : 将要转为JSON字符串的javascript对象。
replacer :该参数可以是多种类型,如果是一个函数,则它可以改变一个javascript对象在字符串化过程中的行为, 如果是一个包含 String 和 Number 对象的数组,则它将作为一个白名单.只有那些键存在域该白名单中的键值对才会被包含进最终生成的JSON字符串中.如果该参数值为null或者被省略,则所有的键值对都会被包含进最终生成的JSON字符串中。
space :该参数可以是一个 String 或 Number 对象,作用是为了在输出的JSON字符串中插入空白符来增强可读性. 如果是Number对象, 则表示用多少个空格来作为空白符; 最大可为10,大于10的数值也取10.最小可为1,小于1的数值无效,则不会显示空白符. 如果是个 String对象, 则该字符串本身会作为空白符,字符串最长可为10个字符.超过的话会截取前十个字符. 如果该参数被省略 (或者为null), 则不会显示空白符
替换函数可以用来过滤值,因为任何返回 undefined 的值将不在返回的字符串中:
const user = {
name: 'John',
email: ''
function replacer(key, value) {
console.log(typeof value);
if (key === 'email') {
const userStr = JSON.stringify(user, replacer);
// &{&id&:229,&name&:&John&}&
传入一个间隔参数的示例:
const user = {
name: 'John',
email: '',
plan: 'Pro'
const userStr = JSON.stringify(user, null, '...');
// &{
// ...&name&: &John&,
// ...&email&: &&,
// ...&plan&: &Pro&
// }&
toJSON方法
如果一个被序列化的对象拥有 toJSON 方法,那么该 toJSON 方法就会覆盖该对象默认的序列化行为:不是那个对象被序列化,而是调用 toJSON 方法后的返回值会被序列化
var obj = {
foo: 'foo',
toJSON:function(){
return 'bar';
JSON.stringify(obj);//'&bar&'
JSON.stringify({x:obj});//'{&x&:&bar&}'
利用toJSON方法,我们可以修改对象转换成JSON的默认行为。
用 JSON.stringify 来格式化对象
在实际使用中,我们可能会格式化一些复杂的对象,这些对象往往对象内嵌套对象。直接看起来并不那么直观,结合上面的的 replacer 和 space 参数,我们可以这样格式化复杂对象:
var censor = function(key,value){
if(typeof(value) == 'function'){
return Function.prototype.toString.call(value)
var foo = {bar:&1&,baz:3,o:{name:'xiaoli',age:21,info:{sex:'男',getSex:function(){return 'sex';}}}};
console.log(JSON.stringify(foo,censor,4))
实际返回的字符串,记住是字符串,如下:
&bar&: &1&,
&name&: &xiaoli&,
&age&: 21,
&sex&: &男&,
&getSex&: &function (){return 'sex';}&
微信公众号搜索: FedJavaScript ,选择关注,与十万前端开发者一起探讨前端学习
你可能感兴趣的文章:
PC和手机端网站滑动拼图验证码效果源码,同时包涵了弹出式Demo,使用ajax形式提交二次验证码所需的验证结果值,嵌入式Demo,使用表单形式提交二次验证所需的验证结果值,移动端手动实现弹出式Demo三种效果
首先要确认前端使用页面,比如...
&font face=&寰?杞?闆呴粦, Arial, sans-serif &&2014骞达紝杞?浠惰?屼笟鍙戝睍杩呴EUR燂紝鍚勭?嶈??瑷EUR灞傚嚭涓嶇┓锛屼互婊¤冻鐢ㄦ埛涓嶆柇鍙樺寲鐨勯渶姹傘EUR傝繖浜涜??...
虽然CSS并不是一种很复杂的技术,但就算你是一个使用CSS多年的高手,仍然会有很多CSS用法/属性/属性值你从来没使用过,甚至从来没听说过。
1.CSS的color属性并非只能用于文本显示
对于CSS的color属性,相信所有Web开发人员...
使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变的信息。
Ajax不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。就像DHT...
在 vue 中用 document 获取 dom 节点进行节点样式更改的时候有可能会出现 ‘style’ is not definde的错误,这时候可以在 mounted 里用 $refs 来获取样式,并进行更改:
&template...
HTML5规范终于在今年正式定稿,对于从事多年HTML5开发的人员来说绝对是一个重大新闻。数字天堂董事长,DCloud CEO王安也发表了文章,从开发者和用户两个角度分析了HTML对两个人群的优势。其实,关于HTML5的开发工具,我们以往的...
Keith Peters 几年前发表的一篇博文,关于学习没有“new”的世界,其中解释了使用原型继承代替构造函数。两者都是纯粹的原型编码。
标准方法(The Standard Way)
一直以来,我们学习的在 JavaScript 里创建对...
AJAX 的要点是 XMLHttpRequest 对象。
不同的浏览器创建 XMLHttpRequest 对象的方法是有差异的。
IE 浏览器使用 ActiveXObject,而其他的浏览器使用名为 XMLHttpRequest 的 Jav...
Riot.js是一款MVP(模型-视图-呈现)开源客户端框架,其最大的特点就是体积非常小,不足1KB,虽然体积小,但它可以帮助用户构建大规模的Web应用程序。
Riot.js是由Moot公司开发,目前最新版本为v0.9.2,遵循MIT开源许...
typeof:以字符串的形式返回变量的原始类型,typeof在两种情况下会返回&undefined&:一个变量没有被声明的时候,和一个变量的值是undefined的时候,注意,typeof null也会返回object,...
微信公众号搜索: FedJavaScript ,选择关注,与十万前端开发者一起探讨前端学习
本站(www.javascriptcn.com)所提供的等资源来源互联网,仅供学习研究之用,版权归该资源的合法拥有者所有,如用于商业用途,请购买正版,原作者若认为本站侵犯了您的版权,请联系我们,我们会立即删除!
鄂ICP备号-1
没有账号?一种脚本注入行为
服务器君一共花费了158.757 ms进行了4次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议
JavaScript是一种在Web开发中经常使用的前端动态脚本技术。在JavaScript中,有一个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略)。这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaScript只能访问与包含它的文档在同一域下的内容。
JavaScript这个安全策略在进行多iframe或多窗口编程、以及Ajax编程时显得尤为重要。根据这个策略,在baidu.com下的页面中包含的JavaScript代码,不能访问在google.com域名下的页面内容;甚至不同的子域名之间的页面也不能通过JavaScript代码互相访问。对于Ajax的影响在于,通过XMLHttpRequest实现的Ajax请求,不能向不同的域提交请求,例如,在abc.example.com下的页面,不能向def.example.com提交Ajax请求,等等。
然而,当进行一些比较深入的前端编程的时候,不可避免地需要进行跨域操作,这时候“同源策略”就显得过于苛刻。JSONP跨域GET请求是一个常用的解决方案,下面我们来看一下JSONP跨域是如何实现的,并且探讨下JSONP跨域的原理。
利用在页面中创建&script>节点的方法向不同域提交HTTP请求的方法称为JSONP,这项技术可以解决跨域提交Ajax请求的问题。JSONP的工作原理如下所述:
假设在http://example1.com/index.php这个页面中向http://example2.com/getinfo.php提交GET请求,我们可以将下面的JavaScript代码放在http://example1.com/index.php这个页面中来实现:
var eleScript= document.createElement("script");
eleScript.type = "text/javascript";
eleScript.src = "http://example2.com/getinfo.php";
document.getElementsByTagName("HEAD")[0].appendChild(eleScript);
当GET请求从http://example2.com/getinfo.php返回时,可以返回一段JavaScript代码,这段代码会自动执行,可以用来负责调用http://example1.com/index.php页面中的一个callback函数。
JSONP的优点是:它不像XMLHttpRequest对象实现的Ajax请求那样受到同源策略的限制;它的兼容性更好,在更加古老的浏览器中都可以运行,不需要XMLHttpRequest或ActiveX的支持;并且在请求完毕后可以通过调用callback的方式回传结果。
JSONP的缺点则是:它只支持GET请求而不支持POST等其它类型的HTTP请求;它只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间如何进行JavaScript调用的问题。
再来一个例子:
var qsData = {'searchWord':$("#searchWord").attr("value"),'currentUserId':
$("#currentUserId").attr("value"),'conditionBean.pageSize':$("#pageSize").attr("value")};
async:false,
url: http://跨域的dns/document!searchJSONResult.action,
type: "GET",
dataType: 'jsonp',
jsonp: 'jsoncallback',
data: qsData,
timeout: 5000,
beforeSend: function(){
//jsonp 方式此方法不被触发.原因可能是dataType如果指定为jsonp的话,就已经不是ajax事件了
success: function (json) {//客户端jquery预先定义好的callback函数,成功获取跨域服务器上的json数据后,会动态执行这个callback函数
if(json.actionErrors.length!=0){
alert(json.actionErrors);
genDynamicContent(qsData,type,json);
complete: function(XMLHttpRequest, textStatus){
$.unblockUI({ fadeOut: 10 });
error: function(xhr){
//jsonp 方式此方法不被触发.原因可能是dataType如果指定为jsonp的话,就已经不是ajax事件了
//请求出错处理
alert("请求出错(请检查相关度网络状况.)");
有时也会看到这样的写法:
$.getJSON("http://跨域的dns/document!searchJSONResult.action?name1="+value1+"&jsoncallback=?",
function(json){
if(json.属性名==值){
// 执行代码
这种方式其实是上例$.ajax({..}) api的一种高级封装,有些$.ajax api底层的参数就被封装而不可见了。
这样,jquery就会拼装成如下的url get请求:
http://跨域的dns/document!searchJSONResult.action?&jsoncallback=jsonp1&_=9&searchWord=
%E7%94%A8%E4%BE%8B&currentUserId=5351&conditionBean.pageSize=15
在响应端(http://跨域的dns/document!searchJSONResult.action),通过 jsoncallback = request.getParameter("jsoncallback") 得到jquery端随后要回调的js function name:jsonp1 然后 response的内容为一个Script Tags:"jsonp1("+按请求参数生成的json数组+")"; jquery就会通过回调方法动态加载调用这个js tag:jsonp1(json数组); 这样就达到了跨域数据交换的目的。
JSONP的最基本的原理是:动态添加一个&script>标签,而script标签的src属性是没有跨域的限制的。这样说来,这种跨域方式其实与ajax XmlHttpRequest协议无关了。
这样其实"jQuery AJAX跨域问题"就成了个伪命题,jquery $.ajax方法名有误导人之嫌。
如果设为dataType: 'jsonp',这个$.ajax方法就和ajax XmlHttpRequest没什么关系了,取而代之的则是JSONP协议。JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问。
JSONP即JSON with Padding。由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名、协议、端口)的资源。如果要进行跨域请求, 我们可以通过使用html的script标记来进行跨域请求,并在响应中返回要执行的script代码,其中可以直接使用JSON传递javascript对象。 这种跨域的通讯方式称为JSONP。
jsonCallback 函数jsonp1(....):是浏览器客户端注册的,获取跨域服务器上的json数据后,回调的函数
Jsonp的执行过程如下:
首先在客户端注册一个callback (如:'jsoncallback'), 然后把callback的名字(如:jsonp1)传给服务器。注意:服务端得到callback的数值后,要用jsonp1(......)把将要输出的json内容包括起来,此时,服务器生成 json 数据才能被客户端正确接收。
然后以 javascript 语法的方式,生成一个function, function 名字就是传递上来的参数 'jsoncallback'的值 jsonp1 .
最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。
客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时javascript文档数据,作为参数, 传入到了客户端预先定义好的 callback 函数(如上例中jquery $.ajax()方法封装的的success: function (json))里。
可以说jsonp的方式原理上和&script src="http://跨域/...xx.js">&/script>是一致的(qq空间就是大量采用这种方式来实现跨域数据交换的)。JSONP是一种脚本注入(Script Injection)行为,所以有一定的安全隐患。
那jquery为什么不支持post方式跨域呢?
虽然采用post+动态生成iframe是可以达到post跨域的目的(有位js牛人就是这样把jquery1.2.5 打patch的),但这样做是一个比较极端的方式,不建议采用。
也可以说get方式的跨域是合法的,post方式从安全角度上,被认为是不合法的,万不得已还是不要剑走偏锋。
client端跨域访问的需求看来也引起w3c的注意了,看资料说html5 WebSocket标准支持跨域的数据交换,应该也是一个将来可选的跨域数据交换的解决方案。
来个超简单的例子:
&!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" >
&title>Test Jsonp&/title>
&script type="text/javascript">
function jsonpCallback(result)
alert(result.msg);
&script type="text/javascript" src="http://crossdomain.com/jsonServerResponse?jsonp=jsonpCallback">&/script>
其中 jsonCallback 是客户端注册的,获取跨域服务器上的json数据后,回调的函数。http://crossdomain.com/jsonServerResponse?jsonp=jsonpCallback 这个 url 是跨域服务器取 json 数据的接口,参数为回调函数的名字,返回的格式为:jsonpCallback({msg:'this is json data'})
简述原理与过程:首先在客户端注册一个callback, 然后把callback的名字传给服务器。此时,服务器先生成 json 数据。 然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp。最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。
客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里。(动态执行回调函数)
本文地址:,欢迎访问原出处。
不打个分吗?
转载随意,但请带上本文地址:
如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 。
大家都在看
现代魔法研究协会欢迎你
阅读一百本计算机著作吧,少年
吴军 (作者)
近一百多年来,总有一些公司很幸运地、有意识或无意识地站在技术革命的浪尖之上。在长达十年甚至几十年的时间里,它们代表着科技的浪潮,直到下一波浪潮的来临。从19世纪末算起,AT&T公司、IBM公司、苹果公司、英特尔公司、微软公司、思科公司、雅虎公司和Google公司都先后被幸运地推到了浪尖。虽然,它们来自不同的领域,中间有些已经衰落或正在衰落,但是它们都极度辉煌过。吴军的这本《浪潮之巅》系统地介绍了这些公司成功的本质原因及科技工业一百多年的发展。在这些公司兴衰的背后,有着它必然的规律。《浪潮之巅》不仅讲述科技工业的历史,更重在揭示它的规律性。
扫一扫,在手机上阅读
栏目最新博文
31,030 views
21,020 views
18,261 views
16,051 views
15,631 views
13,729 views
20,251 views
14,845 views
14,440 views
14,802 views
栏目博文推荐
38,288 views
5,895 views
4,900 views
10,476 views
5,354 views
14,845 views
12,620 views
7,016 views
31,030 views
11,427 views
当你停下来休息的时候,不要忘记别人还在奔跑!
关于网站与作者
互联网信息太多太杂,各互联网公司不断推送娱乐花边新闻,SNS,微博不断转移我们的注意力。但是,我们的时间和精力却是有限的。这里是互联网浩瀚的海洋中的一座宁静与美丽的小岛,供开发者歇息与静心潜心修炼(愿景)。
“Veda”的本义是知识、启示,希望这里能为开发者提供充足的技术资料。
我的电子邮件gonnsai(at)163.com,腾讯微博:,欢迎与我联系。}

我要回帖

更多关于 json格式是什么样的 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信