【发布时间】:2014-03-08 09:50:45
【问题描述】:
我收到一个非常奇怪的错误,但响应正确,我可以看到 JSON 内容:
这是请求:
$.ajax({
type: "GET",
url: urlTwitter,
contentType: "application/json",
dataType: "jsonp",
async: false,
success: function (resp, status, xhr) {
$("#message").html("STATUS: " + xhr.status + " " + xhr.statusText + "\n" + resp);
$("#message").hide();
$.each(resp, function() {
$.each(this, function(i, tweet) {
arrayTweets.push(tweet);
});
});
displayTweets();
},
error: function(resp, status, xhr){
$("#message").html("ERROR: " + xhr.status + " " + xhr.statusText + "\n" + resp.e);
$("#message").show();
}
});
这是回复中的内容:
{"tweet":[{"text":"RT @OSCARHAROTASEND: MUYYY CONTENTO Y MUYYY ORGULLOSO del trabajo d mi hermanito @pablonieto22 en la presentación d su TEAM @CalvoTeam anoc…","user":"Jemurillove"}]}
谁有头绪,我这半天都在打。
感谢任何帮助。
谢谢,
编辑:
这是我的资源,如果它可以提供帮助。并且 Tweet 对象用@XmlRootElement注解:
@GET
@XmlElement(name = "tweet")
@Path("/retrieveTweets")
@Produces(MediaType.APPLICATION_JSON)
public List<Tweet> retrieve(@QueryParam("lat") Double Latitude, @QueryParam("lon") Double Longitude, @QueryParam("rad") Double Radius, @QueryParam("from") String From, @QueryParam("to") String To) {
//List<Status> tweets = null;
List<Tweet> lTweets = new ArrayList<Tweet>();
boolean status = false;
Twitter twitter = new TwitterFactory().getInstance();
AccessToken accessToken = new AccessToken(TwitterInterface.ACCESS_TOKEN, TwitterInterface.ACCESS_TOKEN_SECRET);
twitter.setOAuthConsumer(TwitterInterface.CONSUMER_KEY, TwitterInterface.CONSUMER_SECRET);
twitter.setOAuthAccessToken(accessToken);
try {
Query query = new Query("");
GeoLocation geo = new GeoLocation(Latitude, Longitude);
query.setGeoCode(geo, Radius/1000, Query.KILOMETERS);
query.setCount(100);
query.setSince(From);
query.setUntil(To);
QueryResult result;
result = twitter.search(query);
List<Status>tweets = result.getTweets();
for (Status tweet : tweets) {
System.out.println("@" + tweet.getUser().getScreenName() + " - " + tweet.getText() + " - " + tweet.getCreatedAt());
Tweet t = new Tweet();
t.setUser(tweet.getUser().getScreenName());
t.setText(tweet.getText());
lTweets.add(t);
}
}
catch (TwitterException te) {
te.printStackTrace();
System.out.println("Failed to search tweets: " + te.getMessage());
System.exit(-1);
}
return lTweets;
【问题讨论】:
-
你在页面中使用
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />吗? -
@anurupr 不,我不是。
-
您发布的响应明确表示,该请求不会作为 JSONP 运行,因为我们看不到回调中包含的数据。我看到你分配了 async: false,但是 JSONP 请求不能是同步的。尝试删除此行并检查响应。应该是
callback323123123123({ /* data here */ }) -
编辑后我看到您使用自己的代理,而不是直接 twitter API 调用。在这种情况下,您需要做出与 JSONP 兼容的响应。请参阅@knolleary 答案。
-
@Tommi 删除异步给出了相同的结果。
标签: javascript jquery json rest