Javascript 使用dojo/notifyapi修改Ajax请求后数据
我试图使用DOJO/NOTIFY将表单数据变量附加到Ajax Post请求。例如:有一个表单将项目a=10发送到服务器使用dojo/notify(send)我在ajax post请求中附加了另一个变量b=5,但问题是它不起作用,只有a=10被发送到服务器。以下是我的代码:Javascript 使用dojo/notifyapi修改Ajax请求后数据,javascript,ajax,post,dojo,Javascript,Ajax,Post,Dojo,我试图使用DOJO/NOTIFY将表单数据变量附加到Ajax Post请求。例如:有一个表单将项目a=10发送到服务器使用dojo/notify(send)我在ajax post请求中附加了另一个变量b=5,但问题是它不起作用,只有a=10被发送到服务器。以下是我的代码: require(["dojo/request", "dojo/request/notify"], function (Request, Notify) { //Called before sending Ajax R
require(["dojo/request", "dojo/request/notify"], function (Request, Notify) {
//Called before sending Ajax Request
Notify("send", function (request) {
dojo.byId("status").innerHTML = "Sending Ajax Request";
/*
At this point I want to add another form data item before
it is sent to Server.Example b = 5. The following is the
way to do it but It does not seem to work:
*/
request.options.data += "&b=5";
//I also tries the following but it also not working:
//request.options.data.b = "5";
});
Request.post("http://jsfiddle.net/",{
data:{a:10}
});
});
jsiddle:
dojo/request/notify
从未用于这些目的。您从中得到的响应仅用于向您提供通知,而不用于进一步处理的请求,因此您的修改实际上被忽略
要拦截调用,您应该查看模块,您可以使用该模块注册提供程序(可以用作拦截器)
例如,如果要向请求中添加数据,可以使用:
Registry.register(函数(url、选项){
选项.data.b=5;
返回true;
},请求,真实);
Registry.post(“/echo/json”{
数据:{a:10}
});
因此,在本例中,我使用a=10
发送POST
请求,还要注意,我不再使用dojo/request
模块发送请求,而是使用dojo/request/registry
模块(我使用registry.POST()
)
然后,此模块将查找适当的提供程序,在本例中,我们注册了一个提供程序,该提供程序将始终返回true
,这意味着它将始终被使用
在该提供程序中,我们正在更改options.data
对象,并向其添加一个额外的属性。Registry.register()函数中的其他属性包括:
Request
:告诉提供者系统我们要使用dojo/Request
模块来处理调用
true
:告诉您应该将此提供程序用作第一个提供程序(它具有更高的优先级)
因此,事实上,我们在请求中添加了一个额外的抽象层,使拦截调用成为可能
我还更新了您的JSFIDLE:谢谢您的澄清。你的代码工作得很好。在向服务器发送Ajax post请求和修改数据之前,是否可以调用一个通用钩子。我的意思是,我们不关心请求是通过dojo/request、dojo/registry、jQuery/xhr还是简单的xmlhttprequest发送的……只需要在将请求发送到服务器之前修改请求。如果您想这样做,您必须覆盖xmlhttprequest
原型。您可能会发现一些库可以做这样的事情,但在Dojo中没有(据我所知)。