我有这个代码,并且还使用$ .getJson函数尝试了类似的东西:
jQuery(document).ready(function(){
var kiva_url = "http://api.kivaws.org/v1/loans/newest.json";
jQuery.ajax({
type: "GET",
url: kiva_url,
data:"format=json",
success: function(data){
alert("here");
jQuery.each(data.loans, function(i, loan){
jQuery("#inner_div").append(loan.name + "<br />");
});
},
dataType: "jsonp",
error: function(){
alert("error");
}
});
});
当我查看Firebug时,它返回“无效标签”错误。我搜索了一些人,他们提到使用解析器来解析结果。我可以看到Firebug中的结果。有人可以指出我应该做的一个例子吗?
Firebug错误:
标签无效 http://api.kivaws.org/v1/loans/newest.json?callback=jsonp1249440194660&_=1249440194924&format=json& 第1行
可以在此处找到json外观的示例输出: http://build.kiva.org/docs/data/loans
答案 0 :(得分:5)
嗯,我找到了答案......看起来kiva不支持jsonp这就是jquery在这里做的事情 -
http://groups.google.com/group/build-kiva/browse_thread/thread/9e9f9d5df821ff8c
......我们没有计划支持JSONP。 支持这个主张穷人 安全实践和有 已经有一些很好的方式来访问 来自JavaScript的数据保护您的 应用程序和您的用户。这是一个 关于这个主题的精彩文章:
http://yuiblog.com/blog/2007/04/10/json-and-browser-security/
虽然对Kiva贷方的风险很低 现在因为我们只处理 公共数据,允许私人贷款人 通过脚本标签导入的数据是 未来的风险。我们的 思想是风险(和复杂性 添加以创建安全应用程序) 不值得的好处 开发者。
为。编写服务器端代理 你需要的饲料是最常见的 访问数据的解决方案 基于浏览器的应用程序一些 使用iFrames存在其他技巧。该 最好的希望是新一代的客户 - 基于技术/标准的技术/标准 让基于浏览器的JavaScript访问 安全的跨域资源( http://dev.w3.org/2006/waf/access-control/ http://json.org/JSONRequest.html)。 一些工具,如BrowserPlus和Gears 今天让你玩这些,但是你 将无法依赖这些 野了一会儿。
作为最后一点,我会指出这一点 任何使用JSON响应的人 JavaScript应该解析JSON 显式或之前验证JSON 把eval()带到它。见这里:
从页面链接是一个伟大的 参考实现 提出ECMAScript JSON解析器 interface,JSON.parse()。
干杯,skylar
答案 1 :(得分:2)
也许这可以帮助jsonp:
答案 2 :(得分:2)
当您返回数据时,是否使用正确的内容类型和方法返回它?
您应该按如下方式返回数据(php 5示例):
$return = "my_callback_method(" . json_encode( array('data'=>'your data etc') ). ")";
while (@ob_end_clean());
header('Cache-Control: no-cache');
header('Content-type: application/json');
print_r($return);
在您的调用javascript代码中,您必须有一个方法来匹配您返回的回调方法,在这种情况下:
function my_callback_method( returned_data ){
}
因此,您的完整调用js应该类似于以下内容
jQuery(document).ready(function(){
var kiva_url = "http://api.kivaws.org/v1/loans/newest.json";
jQuery.ajax({
type: "GET",
url: kiva_url,
data:"format=json",
dataType: "jsonp",
error: function(xmlhttp,error_msg){
alert("error"+error_msg);
}
});
function my_callback_method( data ){
alert("here");
if( data && typeof(data) == 'object') ){
jQuery.each(data.loans, function(i, loan){
jQuery("#inner_div").append(loan.name + "<br />");
});
}
}
});
答案 3 :(得分:0)
错误发生在哪里?当您尝试循环遍历ajax数据并将其附加到inner_div时是否会发生错误?如果是,请告诉我们data.loans的样子。
此外,您的代码中存在拼写错误:
jQuery.each(data.loans, function(i, loan){
jQuery("#inner_div").append(loan.name + "<br />"); //It should be loan.name and not laon.name
});
},
答案 4 :(得分:0)
这就是答案 http://forum.jquery.com/topic/jquery-getjson-invalid-label
只需使用回调请求包装Json响应即可
例如。 jQuery16203473509402899789_1315368234762({"Code":200,"Message":"Place added successfully","Content":""});
哪里
jQuery16203473509402899789_1315368234762
是您的回调请求(您可以通过查询字符串获取)
{"Code":200,"Message":"Place added successfully"}
是您的JSON回复