2013-04-11 51 views
3

我是新来JSONP,下面是我的情况:

我用PHP写一个js文件与JSON内容前端阅读,我想通过以下方式和它的作品。

但是,我想问

A)是有必要包括jsoncallback()来包装album.jsJSON内容?

B)使用$.getScript()来读js文件是否包含跨域的JSON内容很好吗?

由于

1.代码来加载JS文件

$.getScript("http://127.0.0.1:8080/album.js") 

function jsoncallback (data){ 
    $.each(data, function() { 
     console.log($(this)) 
    }) 
} 

2. album.js内容

jsoncallback([{ 
     "id": "23", 
     "author": "roy", 
     "email": "a", 
     "age": "0", 
     "tel": "1", 
     "title": "test", 
     "image_name": "Lighthouse.jpg", 
     "image_type": "image\/jpeg", 
     "image_size": "561276", 
     "status": "1", 
     "create_date": "2013-04-03 14:39:32", 
     "modify_date": "2013-04-09 19:25:07" 
    }, { 
     "id": "22", 
     "author": "roy", 
     "email": "a", 
     "age": "0", 
     "tel": "1", 
     "title": "test", 
     "image_name": "Desert.jpg", 
     "image_type": "image\/jpeg", 
     "image_size": "845941", 
     "status": "1", 
     "create_date": "2013-04-03 14:39:29", 
     "modify_date": "2013-04-09 19:25:02" 
    } 
]) 
+0

它是确定,但最好是通过回调函数作为参数的名称,让你的代码重用能力。如果你使用jquery,我会使用包含的jsonp功能,因为它有一个超时选项和每个请求回调的可能性。 – 2013-04-11 05:05:27

回答

1

A和B:是。这是JSONP的工作原理。

你可以把它重新写成这样:

$.ajax({ 
    url: "http://127.0.0.1:8080/album.js", 
    jsonpCallback: "jsonpcallback", 
    jsonp: false, 
    dataType: "jsonp" 
}).done(function(data){ 
    console.log(data); // array of objects 
}); 
+0

它的工作原理,谢谢。但是你知道为什么你的脚本可以放在'$(document).ready'里面并且运行成功,而且我的脚本不能放在'$(document).ready'里面,因为它会有js错误'TypeError:jsoncallback不是一个函数? – 2013-04-11 06:22:16

+1

@CharlesYeung因为你的要求函数是全局的。 Mine让jQuery为我创建了这个全局函数。如果你修改你的'window.jsonpcallback =函数(数据){...'它会工作。 – 2013-04-11 06:30:17

+0

感谢您的信息,它可以添加'window.jsxxxx'。 – 2013-04-11 06:37:38