jQuery.getJSON 跨域问题

jQuery的 getJSON 方法可以本地或远程获取JSON 对象进行操作。
其基本格式是:
jQuery.getJSON(url,data,success(data,status,xhr))
在不跨域的情况下:只需要

$.getJSON("http://localhost/getBookInfo/100",{},
  function(data){ $.each(data, function(k,v){
      $("#bookinfo_" + k.replace(/\./g, '\\.') ).html(v)})
})

但是如果是跨域的,则需要加入参数 callback=?

$.getJSON("http://remotehost/getBookInfo/100?callback=?",{},
   function(data){ $.each(data, function(k,v){
      $("#bookinfo_" + k.replace(/\./g, '\\.') ).html(v)})
})

而服务器端需要将 data 包装一下后返回,
如原返回是 { “name” : “bookname”, “price”:”50.00″ , “sold”:”150″ }
则包装后为 request.getParam(“callback”)({ “name” : “bookname”, “price”:”50.00″ , “sold”:”150″ }
跨域时,jQuery 会自动生成一个script标签加载 远程服务器上的 JS,而 script 标签本身是可以跨域的。在script 外面包上执行某个方法,方法名由 callback 传入,则 jQuery 会自动定义一个名称类似jQuery16209379892267785707_1363072523219的方法,再将这个名称以 callback 的参数传至服务器。即
http://remotehost/getBookInfo/100?callback=jQuery16209379892267785707_1363072523219
服务器则需要将原有的 data 外加
jQuery16209379892267785707_1363072523219({ “name” : “bookname”, “price”:”50.00″ , “sold”:”150″ })
加载完该JS 后,浏览器便会执行该JS,从而实现远程的 json 调用。
说白了还是 script 标签 + 一个特定的参数,只是写法统一得像 ajax 请求而已。

reeoo.com - web design inspiration

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注