Extjs调用RESTful Web服务

时间:2009-12-01 14:50:01

标签: ajax web-services extjs rest

我正在尝试使用Extjs进行RESTful Web服务调用。以下是我正在使用的代码:

Ext.Ajax.request({ url: incomingURL ,
   method: 'POST',
   params: {param1:p1, param2:p2},
   success: function(responseObject){
     var obj = Ext.decode(responseObject.responseText);
     alert(obj);
   },
   failure: function(responseObject){
     var obj = Ext.decode(responseObject.responseText);
     alert(obj);
   }
});

但它不起作用,请求是使用OPTIONS方法而不是POST发送的。

我也尝试使用下面的代码做同样的事情,但结果是一样的:

var conn = new Ext.data.Connection();
conn.request({
  url: incomingURL,
  method: 'POST',
  params: {param1:p1, param2:p2},
  success: function(responseObject) 
  {
    Ext.Msg.alert('Status', 'success');
  },
  failure: function(responseObject) 
  {
    Ext.Msg.alert('Status', 'Failure');
  }
});

但是当我尝试使用基本的ajax调用(直接使用浏览器对象,即XMLHttpRequest()或ActiveXObject(“Microsoft.XMLHTTP”))时,它工作正常,我得到了预期的响应。

任何人都可以帮助我,因为我无法理解我在使用extjs ajax调用时出错了什么?

3 个答案:

答案 0 :(得分:2)

您无法在域之间进行标准的AJAX调用。 Ext.Ajax.request的URL应该是相对的(相对于脚本的原点)。

如果您想进行跨域调用,请使用ScriptTagProxy等。

答案 1 :(得分:1)

问题正是因为ob1和Chuck Hinson所描述的原因。

我有一个RESTful服务,它运行在Tomcat上。

我使用带有Json阅读器的ExtJs创建了一个静态客户端(没有部署到Tomcat)。 我刚刚创建了一个html页面,其中ExtJs集成了使用REST服务,如url:http://localhost:8080/service/invoices/

并且ExtJs一直在发出OPTIONS请求,而不是GET或POST,即使我将它们设置为使用方法。问题是这个安全功能,因为客户端不是同一个应用程序的一部分,我在域之间进行AJAX调用。

只要我将客户端放到我的Web应用程序并部署到Tomcat并开始使用相对调用它就开始工作。

答案 2 :(得分:0)

如果您不想要跨域请求,请从ajax代理的propery url中删除网站前缀'http:// website'。