0

我正在尝试使用 dojo 工具包调用 REST web 服务,似乎调用遇到了一些问题,这是使用 dojo 的调用

    dojo.xhrGet({
  url: 'http://localhost:9080/TestJMSWeb/jaxrs/categories/all',
  handleAs: 'json',
  timeout: 2000,
  load: callback
});
var callback = dojo.hitch(this, function(data) {
  var massagedData = {
    label: 'categorie',
    identifier: 'id',
    items: data
  }
  this.store = new dojo.data.ItemFileReadStore({data: massagedData});
  });

网络服务代码在这里

@GET
    @Path("/all")
@Produces("application/json")
public JSONArray getAllCategories() throws IOException {
    final List<Categorie> allCategories = manager.getCategories();
    if (allCategories == null || allCategories.isEmpty())
        throw new WebApplicationException(ErrorUtil.jSONArrayResponse(Status.NO_CONTENT, "No category found"));
    JSONArray jsonArray = jsonCustomerArray(allCategories);
    return jsonArray;

}

当我调用网络服务时,我收到一条错误消息

ResourceRegis I org.apache.wink.server.internal.registry.ResourceRegistry filterDispatchMethods The system cannot find any method in the ressources.CategorieRessouce class that supports OPTIONS. Verify that a method exists.
[4/24/12 1:23:41:531 GMT] 0000002f SystemErr     R 0  TestJMSWeb  INFO   [WebContainer : 0] openjpa.Runtime - OpenJPA dynamically loaded a validation provider.

似乎在我使用 .xhrGet 函数时尝试使用 OPTIONS 方法调用资源有什么问题?

4

1 回答 1

0

这是描述问题的链接: http: //engin.bzzzzt.biz/2010/01/22/first-dojo-impression/

这家伙谈到如果它是一个跨域请求(我相信你的请求是,因为端口),并且请求包含一些 Access-Control-* HTTP 标头,那么浏览器将如何将请求作为 OPTIONS 而不是 GET 发送。

Dojo 在确定您正在发出跨域请求时会添加 Access-Control-* 标头。您可以尝试通过转到 dojo/_base/xhr.js 并注释掉以下行(723 到 729)来自己解决此问题:

// FIXME: is this appropriate for all content types?
if(args.contentType !== false){
    xhr.setRequestHeader("Content-Type", args.contentType || _defaultContentType);
}
if(!args.headers || !("X-Requested-With" in args.headers)){
    xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
}

我还没有尝试过这个修复,所以请让我知道它是否有效!

于 2012-04-24T13:55:14.380 回答