Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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 为什么可以';jQuery ajaxSend是否创建数据?_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 为什么可以';jQuery ajaxSend是否创建数据?

Javascript 为什么可以';jQuery ajaxSend是否创建数据?,javascript,jquery,ajax,Javascript,Jquery,Ajax,请参阅下面的代码 在ajaxSend中,我可以编辑或添加s.data,但如果我没有在$.post()中提供任何其他数据,jQuery将发送请求,而不发送其他数据 有什么建议吗 <?php if ($_SERVER['REQUEST_METHOD'] == 'POST') { print_r($_POST); } else { ?> <!DOCTYPE html> <html> <head> <meta charset="utf

请参阅下面的代码

ajaxSend
中,我可以编辑或添加
s.data
,但如果我没有在$.post()中提供任何其他数据,jQuery将发送请求,而不发送其他数据

有什么建议吗

<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    print_r($_POST);
} else { ?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Test</title>    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    <script>
        $(document).ajaxSend(function (e, xhr, s) {
            s.data = s.data ? s.data+'&' : '';
            s.data += 'my_value=1';
        })

        $.post('/test.php'); // empty $_POST
        $.post('/test.php', {value: 0}); // $_POST with value and my_value
    </script>
</head>
<body>

</body>
</html>
<?php } ?>

试验
$(文档).ajaxSend(函数(e、xhr、s){
s、 数据=s.data?s.data+'&':'';
s、 数据+='my_值=1';
})
$.post('/test.php');//空的$邮政
$.post('/test.php',{value:0});//$_用value和my_值发布帖子

我已经有一段时间没有使用jQuery了,因此也没有使用它的ajax功能,但是在查看了它的源代码之后,所选择的事件似乎不适合您想要做的事情

  • 本文档仅给出了使用
    ajaxSend
    事件记录请求的示例
  • jQuery的
    src/ajax.js
    中的代码在创建(最明显的是启动)请求之后触发
    ajaxSend
    。显然,事件是同步发送的。因此,您的事件处理程序碰巧处理一个已经启动的请求,但该请求被延迟,直到当前执行环境(启动请求并调用您的事件处理程序的环境)在后台实际处理请求之前结束。这就是为什么通过引用访问对象可以修改附加到正在运行的请求的任何数据,但由于jQuery以前没有将数据附加到请求,因此无法添加数据。在事件被调度后,它不会使用
    s.data
    。当时只做了几件事,主要与处理超时等有关

因此,没有任何文档建议使用
ajaxSend
进行此类请求过滤,也没有任何代码对此提供支持。但是在检查代码时,我无意中发现了一些对所谓的预过滤器的支持。也许你应该坚持这样做,并查看上的文档。

我看到它正确地附加了
my_value=1
。“你这一头看到了什么?”丹尼尔特。在第二个请求数组中([value]=>0[my_value]=>1),这不是你想要的吗?@DanielT。第一个请求有问题,我看不到
$\u POST['my\u value']
是的,这个回调在ajaxPrefilter中工作得很好。但我真的很惊讶无法附加数据。