繁体   English   中英

为什么jQuery ajaxSend无法创建数据?

[英]Why can't jQuery ajaxSend create data?

参见下面的代码。

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 } ?>

我已经有一段时间没有使用jQuery了,因此也没有使用过它的ajax东西,但是在查看了其源代码之后,所选事件似乎不适合您要执行的操作。

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

因此,既没有文档建议使用ajaxSend进行这种请求过滤,也没有代码显示对此的任何支持。 但是在检查代码时,我偶然发现了对所谓的prefilters的一些支持。 也许您应该坚持这样做,并查看$ .ajaxPrefilter上的文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM