我在jQuery ajax (jsonp) ignores a timeout and doesn’t fire the error event中发现了JQuery jsonp问题。
我试图通过以下方式获取最新的Twitter更新:
var jsonTwitterFeed = "http://twitter.com/statuses/user_timeline/softamo.json?count=3";
$.jsonp({
url: jsonTwitterFeed,
data: {},
dataType: "jsonp",
callbackParameter: "jsoncallback",
timeout: 5000,
success: function(data){
$.each(data, function(){
$("#sNews ul.tweets").append("<li>" + replaceURLWithHTMLLinks(data.text) + "</li>");
});
},
error: function(XHR, textStatus, errorThrown){
alert("ERREUR: " + textStatus);
alert("ERREUR: " + errorThrown);
}
});
function replaceURLWithHTMLLinks(text) {
var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
return text.replace(exp,"<a href='$1'>$1</a>");
}
错误警报调用执行:
ERREUR:错误
ERREUR:未定义
但是,我可以在Firebug中看到JSON对象。
知道发生了什么事吗?
答案 0 :(得分:2)
尝试更改
$.each(data, function(){
$("#sNews ul.tweets").append("<li>" + replaceURLWithHTMLLinks(data.text) + "</li>");
到
$.each(data, function(post, val){
$("#sNews ul.tweets").append("<li>" + replaceURLWithHTMLLinks(val.text) + "</li>");
修改:
我确实改变了另一件事,但忘记将其添加到答案中。
callbackParameter: "jsoncallback",
应该是
callbackParameter: "callback",
为了完整起见,这是我做的测试页面:
<html>
<head>
<title>test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript" src="jquery.jsonp-1.1.0.min.js"></script>
<script type="text/javascript">
$(document).ready( function() {
var jsonTwitterFeed = "http://twitter.com/statuses/user_timeline/dougw.json?count=3";
$.jsonp({
url: jsonTwitterFeed,
data: {},
dataType: "jsonp",
callbackParameter: "callback",
timeout: 5000,
success: function(data){
$.each(data, function(key, val){
$("#sNews ul.tweets").append("<li>" + replaceURLWithHTMLLinks(val.text) + "</li>");
});
},
error: function(XHR, textStatus, errorThrown){
alert("ERREUR: " + textStatus);
alert("ERREUR: " + errorThrown);
}
});
function replaceURLWithHTMLLinks(text) {
var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
return text.replace(exp,"<a href='$1'>$1</a>");
}
});
</script>
</head>
<body>
<div id="sNews">
<ul class="tweets">
</ul>
</div>
</body>
答案 1 :(得分:2)
我不知道这是否完全相关,但您可能错过了Feed网址中JSONP的回调,除非默认设置:
var jsonTwitterFeed = "http://twitter.com/statuses/user_timeline/softamo.json?count=3&callback=?";
此外,您的jquery AJAX调用可以简单地使用默认的AJAX而不是JSONP。试试这个并告诉我们:
$.ajax({
url: jsonTwitterFeed,
data: {},
dataType: "jsonp",
callbackParameter: "jsoncallback",
timeout: 5000,
success: function(data){
var str = '';
for(var i = 0; i < data.length; i++) {
str += '<li>' + replaceURLWithHTMLLinks(data[i].text) + '</li>';
}
$("#sNews ul.tweets").append(str);
},
error: function(XHR, textStatus, errorThrown){
alert("ERREUR: " + textStatus);
alert("ERREUR: " + errorThrown);
}
});
function replaceURLWithHTMLLinks(text) {
var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
return text.replace(exp,"<a href='$1'>$1</a>");
}
答案 2 :(得分:0)
我尝试使用以下代码,并获得正确触发的成功函数。
$.getJSON(jsonTwitterFeed, {
success: function(data){
$.each(data, function(){
$("#sNews ul.tweets").append("<li>" + replaceURLWithHTMLLinks(data.text) + "</li>");
});
},
error: function(XHR, textStatus, errorThrown){
alert("ERREUR: " + textStatus);
alert("ERREUR: " + errorThrown);
}
});