Javascript jQuery在ajax全局事件中注入数据

Javascript jQuery在ajax全局事件中注入数据,javascript,jquery,ajax,Javascript,Jquery,Ajax,我试图在ajax请求中注入数据,但失败了,我不知道为什么。我试图查看jQuery源代码,但仍然找不到为什么它不起作用,非常感谢您的帮助。代码如下: $('#someElement').ajaxSend(function(e, req, options) { options.data += (options.data.length > 0 ? '&' : '') + '__token=' + $('input#requestToken').val(); }).ajaxSucc

我试图在ajax请求中注入数据,但失败了,我不知道为什么。我试图查看jQuery源代码,但仍然找不到为什么它不起作用,非常感谢您的帮助。代码如下:

$('#someElement').ajaxSend(function(e, req, options) {
    options.data += (options.data.length > 0 ? '&' : '') + '__token=' + $('input#requestToken').val();
}).ajaxSuccess(function(e, req, options, data) {
    if (data.nextToken) {
        $('input#requestToken').val(data.nextToken);
        delete data.nextToken;
    }
});
响应如下所示:

{
   "response":
   {
      "code":0,
      // ...
   },
   "nextToken":"4ded26352b3d44"
}
典型的请求是,例如:

$.getJSON(url, {something:'value'}, function(data) {
   if (data.response.code != 0) {
      // handle code
   }
});
问题是,发送的数据是“
something=value
”;修改后的
数据
不会被发送

**编辑**

当前请求数据为

something: value
应该是

something: value
__token: 4ded288eec1f56
ajaxSend
事件回调中,如果我在修改后打印
options.data
的值,则值为“
something=value&\uu-token=4ded288eec1f56
”,但“
\uu-token=4ded288eec1f56
”未发送。为什么不在请求中发送

但更具体地说,如果可能,如何“修复”此问题?

-edit

更新——问题在于getJSON

看起来,虽然jQuery在这两种情况下都会触发ajaxSend事件,但它实际上并不像在post中那样在getJSON中使用更改后的数据变量

将getJSON替换为$.post以解决您的问题(这就是我在下面链接的示例中所做的)

-编辑- 我在这里设置了一个版本:

(参见控制台)

我让服务器发回它得到的任何东西,它说: __令牌:“托克” 键:“val1” 键2:“val2”

看来修改请求数据是可行的——您的处理程序在服务器端看起来像什么


我正在研究它——首先也是最重要的是(我在尝试复制问题时犯了一个错误),您是否检查过在文档准备好后分配事件?($(function(){});)

我不确定您的JSON响应是否正确:

{
  "response":
  {
  "code":0,  <-- this is not valid
  },
  "nextToken":"4ded26352b3d44"
}
要验证JSON响应,您可以使用:


我认为问题在于,当jQuery决定调用“ajaxSend”回调时,参数已经用于准备请求。因此,在该处理程序中更改它们没有效果


编辑-给出@mikermcneil的答案,我不确定这是否正确。至少可以说,jQuery“ajax”方法是复杂的。他的示例页面似乎确实可以工作,这让我很困惑,但可能会帮助我意识到我对jQuery内部的了解是多么的少:-)

您只在getJSON调用中的第二个参数{something:'value}内传递数据。要发送到服务器的任何数据都必须包含在其中。因此,该参数中必须包含_标记

getJSON调用中的第三个参数是回调函数。传递给该函数的参数是来自服务器的响应

$.getJSON(
    url,
    {
        something:'value',
        __token: 'token value'
    ,
    function(response) {
        if (response.response.code != 0) {
        // handle code
        }
    }
);

很难理解问题是什么。你能解释一下你想要发生什么以及实际发生了什么吗?好的,非常感谢,这很有帮助:-)好问题,是的,我愿意。一切都正常,除了奇怪的issueAhh---POST会涉及与GET不同的参数传递机制,但是我不知道在jQuery代码中如何/在哪里处理POST参数。请参阅@Pointy的答案以了解为什么它使用$.POST而不是$.getJSONYep,就是这样--我使用$.get进行了尝试,得到了与$.getJSONyes相同的结果,这很有趣。。。所以我需要在全局事件中检查查询是POST还是GET,然后在POST中设置
options.data
,在GET中设置
options.url
,然后删除不必要的、不相关的响应数据。我忘了逗号。请不要担心那件事。响应是由Zend_Json::encode()生成的是的,我想就是这样。虽然我不知道为什么,也不知道如何绕过这个“限制”…这段代码(jQuery“ajax”函数及其所有朋友)很难理解。我甚至不知道参数是如何进入POST请求的XHR对象的,尽管我想我看到了get请求的情况。我没有试着做你在这里做的事情,所以我没有任何建议。哦,等等,你可能会看到“options.url”的价值是什么。也许你可以改变,但我也不确定。这是一个想法。。。我会试试的,它能用!总之,可以修改
数据
设置,但该值已附加到
url
,因此修改
url
确实有效。此外,
数据
与传递给
ajaxSuccess
事件系列的数据相同,因此如果所有请求参数都需要出现在响应事件中,那么
数据
也应该同步。因为有些请求是在jQuery插件等内部完成的,并且请求令牌需要经常“验证”和“更新”,修改jQuery插件以发送令牌并不是一种选择。
$.getJSON(
    url,
    {
        something:'value',
        __token: 'token value'
    ,
    function(response) {
        if (response.response.code != 0) {
        // handle code
        }
    }
);