Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用dojo/notifyapi修改Ajax请求后数据_Javascript_Ajax_Post_Dojo - Fatal编程技术网

Javascript 使用dojo/notifyapi修改Ajax请求后数据

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

我试图使用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 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中没有(据我所知)。