我无法通过dojo 1.8的xhr调用发布dojo表单,但它是通过不推荐使用的方法dojo.xhrPost发布的。请查看我使用的代码片段。
这是jsp中dojo-ajax调用的一部分
require(["dojo/request/xhr"],function(xhr){
xhr('http://localhost:8080/myApp/call',{
data: 'callerName',
method:"POST",
load: function(data, ioargs) {
alert("The message is: " + ioargs.xhr.status);
},
error: function(error){
alert("Returned: " + error);
}
});
});
<form data-dojo-type="dijit/form/Form" name="callerName" id="callerName">
...here are dojo input types
</form>
下面是弹簧控制器
@RequestMapping(value="/call",method=RequestMethod.POST)
public ModelAndView saveData3(HttpServletRequest req, @ModelAttribute Caller caller){}
在这里,我没有获取从表单到调用方模型属性的值。但电话正在打来。如果我选择下面不推荐使用的调用a,则不使用此ajax调用,而是绑定了值。
dojo.xhrPost({
url: 'http://localhost:8080/myApp/call',
form: 'callerName',
load: function(response) {
}
对于1.8中的最新调用,而不是参数"data",我尝试了"form"仍然没有发生。这个问题可能是什么?
load
和error
回调属性,转而支持deferreds/promise。
- 带有延迟的新代码的示例代码位于带有回调的旧代码之下
- 另一个样本
我原以为Dojo会在2.0之前保持向后兼容性,但也许它被删除了(啊……如果您需要旧的dojo/_base/xhr
,也许1.8支持旧的语法)。
此外,请注意,最好使用dojo/request
,而不是直接使用dojo/request/xhr
。
更新:为什么dojo/request
优于dojo/request/xhr
:
CCD_ 8是比CCD_ 9更高级别的抽象。因此:
- 更具可移植性:
dojo/request
自动选择合适的提供程序,并在客户端和服务器中工作。dojo/request/xhr
将无法在服务器(node.js)上工作,dojo/request/node
将无法在客户端(浏览器)上工作 - 更灵活。在未来,也许会增加一个更好的提供商。
dojo/request
可以在不更改代码的情况下使用最好的提供程序。此外,还可以根据URL配置提供程序。一个示例用例是将dojo/request/xhr
用于相同域请求,将dojo/request/script
用于跨域请求
来源:
- kitsonk,Dojo核心贡献者
dojo/request/registry
文档dojo/request
文档