我正在尝试使用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调用时出错了什么?
答案 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'。