在firebug上运行此代码时,在控制台中它将显示无效标签,并且我的成功回调也不会触发。在摆弄谷歌关于答案的方式后,我发现当使用jsonp我需要解析结果而且我需要回调。现在,我正在撞墙,寻找可能的答案。你能帮帮我这个吗?感谢。
$.ajax( {
url: 'http://localhost:8732/Service1/data/10',
type: "GET",
contentType: "application/json; charset=utf-8",
dataType: "jsonp",
processdata:true,
jsonpCallback: 'mycallback',
success : function(data) {
var json = $.parseJSON(data);
$('#items').html(json);
alert(json);
},
error : function(req, status, ex) {
alert("Lol" + ex);
}
});
}
同样alert("Lol"+ex)
将提示LoljQuery16403233689395911671_1329386795307
未被称为“
答案 0 :(得分:1)
<强> jsonpString 强>
覆盖jsonp请求中的回调函数名称。这个值 将在'callback =?'中使用而不是'callback'的一部分 在url中查询字符串。所以{jsonp:'onJSONPLoad'}会导致 'onJSONPLoad =?传递给服务器。从jQuery 1.5开始,设置 jsonp选项为false可防止jQuery添加“?回调” 字符串到URL或尝试使用“=?”转型。在 在这种情况下,您还应该显式设置jsonpCallback设置。 例如,{jsonp:false,jsonpCallback:“callbackName”}
jsonpCallbackString,功能
指定JSONP请求的回调函数名称。这个值 将用于代替自动生成的随机名称 jQuery的。最好让jQuery生成一个唯一的名称 使管理请求更容易,并提供回调和错误 处理。您可能希望在要启用时指定回调 更好的浏览器缓存GET请求。从jQuery 1.5开始,你也可以 使用一个函数进行此设置,在这种情况下的值为 jsonpCallback设置为该函数的返回值
代码示例:
<!DOCTYPE html>
<html>
<head>
<style>img{ height: 100px; float: left; }</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<div id="images">
</div>
<script>
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?",
{
tags: "cat",
tagmode: "any",
format: "json"
},
function(data) {
$.each(data.items, function(i,item){
$("<img/>").attr("src", item.media.m).appendTo("#images");
if ( i == 3 ) return false;
});
});</script>
</body>
</html>
参考文献:http://api.jquery.com/jQuery.getJSON/
编辑:代码2
$.ajax({
url: 'http://server:port/path/to/file',
type: 'GET',
dataType: 'jsonp',
cache: false,
jsonp: '$callback',
error: function (x, t, r) { alert(x.response.message); },
success: function (data) {
$.each(data.d.results, function (i, val) {
$("#results").append("<div>" + val.name + "</div>");
});
}
});
答案 1 :(得分:0)
json在http://localhost:8732/Service1/data/10有效吗?坚持:http://jsonlint.com/。你也可以尝试捕捉错误:
var request = $.ajax( {
...
});
request.error(function(error) {
console.log(error);
});