【发布时间】:2014-04-10 19:21:16
【问题描述】:
我正在尝试通过 POST 向我的 REST 资源 (Java) 发送表单,但我无法这样做,因为我的请求是作为 OPTIONS 发送的。我知道 REST 资源很好,因为在我使用 Poster Firefox 进行测试时它可以完美运行。
jQuery/Ajax 调用:
function loadTwitter(){
arrayTweets = new Array();
var urlTwitter = "http://localhost:8081/streamingvideoservice/services/twitter/retrieveTweets";
$.ajax({
type: "POST",
url: urlTwitter,
contentType: "application/x-www-form-urlencoded",
//accept: "application/json",
data: $("form#mapForm").serialize(),
dataType: "json",
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, item) {
arrayTweets.push(item);
});
});
displayTweets();
},
error: function(resp, status, xhr){
$("#message").html("ERROR: " + xhr.status + " " + xhr.statusText + "\n" + resp.e);
$("#message").show();
}
});
}
REST 资源:
@POST
@Path("/retrieveTweets")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces("application/json")
public List<Tweet> retrieve(@FormParam("lat") Double Latitude, @FormParam("lon") Double Longitude, @FormParam("rad") Integer Radius, @FormParam("from") String From, @FormParam("to") String To) {
ArrayList<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, 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;
}
我正在使用 jQuery 1.9.1 并将资源托管在 Tomcat 6 上。
感谢任何帮助。
提前致谢。
【问题讨论】:
-
你在做一些CORS(跨域资源共享)请求吗?
-
它都在同一台机器上......所以它是一个本地主机调用(正如你在我的 ajax 调用中看到的那样)。是这个意思吗?
-
@Maged 主机(本地主机)不是决定它是否是跨域的。 端口也很重要。您当前的网络应用程序是否也在端口 8081 上运行?
-
正确的 8081。为了给你一个更好的图片,它是一个简单的 HTML 页面,调用在 tomcat 上运行的资源。
标签: javascript jquery ajax rest post