Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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 如何在done/success ajax函数中访问ajax请求数据?_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 如何在done/success ajax函数中访问ajax请求数据?

Javascript 如何在done/success ajax函数中访问ajax请求数据?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个文本输入,其值不断变化 每次值更改时,都会发出一个ajax请求 因为文本输入的值是不断变化的,当ajax请求成功返回时,我想确定文本输入的当前值是否与我在ajax请求数据中发送的值相同 我没有看到任何示例显示如何从ajaxdone/success函数中访问请求数据 如何在done/success ajax函数中访问ajax请求数据 我可以在响应数据中包含请求值,但似乎有一种方法可以做到这一点,而无需更新API。只需将输入值分配给变量: function makeRequest() {

我有一个文本输入,其值不断变化

每次值更改时,都会发出一个ajax请求

因为文本输入的值是不断变化的,当ajax请求成功返回时,我想确定文本输入的当前值是否与我在ajax请求数据中发送的值相同

我没有看到任何示例显示如何从ajaxdone/success函数中访问请求数据

如何在done/success ajax函数中访问ajax请求数据


我可以在响应数据中包含请求值,但似乎有一种方法可以做到这一点,而无需更新API。

只需将输入值分配给变量:

function makeRequest() {
    var value = myInput.value;
    $.ajax({
       // ...
       success: function() {
           if (value === myInput.value) {
               // ...
           }
       }
    });
}

如果正确解释问题,请尝试使用
输入
事件
?值应该总是不同的?若要求缓存值,则确定返回的值是否与缓存中的值不同,是否创建缓存对象

$(function () {
    var input = $("input");

    input.on("input", function (e) {
        $.post("/echo/json/", {
            json: JSON.stringify({
                "value": e.target.value
            })
        }, "json")
            .then(function (data) {
            console.log(data)
        }, function (jqxhr, textStatus, errorThrown) {
            console.log(errorThrown)
        })
    });
});

jsiddle

您应该将当前输入值存储在变量中,然后简单地检查它是否等于当前值。因为ajax请求是异步的,所以不能以这种方式将该值存储在变量中

function sendRequest(inputValue){
    var currentValue = inputValue;
    $.ajax({ })
        .done(function(data) {
            // currentValue could be changed
        });
}
相反,您需要将该变量绑定到,然后检查它是否等于
.done
中的当前输入值

以下方法应有效(未经测试):


它是回调函数的第一个参数。人们通常称之为
data
。如果您创建一个函数,该函数接受输入值作为参数并执行Ajax请求,那么您可以通过函数参数访问该值。或者,当您发出请求时,只需将输入值赋给一个变量就足够了。@Derek:这就是响应。OP正在请求通过请求发送的数据。是否要访问请求而不是响应数据?为什么?@Alp因为“我想确定文本输入的当前值是否与我在ajax请求数据中发送的值相同”条目对他来说很重要,我想我知道你的意图是好的,但你所描述的在这个特定场景中是不正确的。在第一个示例中,
currentValue
(或
inputValue
)的值不会改变,除非函数本身中有什么东西会改变
currentValue
(和
inputValue
)是一个局部变量,因此不能从外部进行更改。因此,不需要自调用函数,只需在函数中重新分配
currentValue
(或
inputValue
)。在某些情况下,您所描述的是一个问题,但这不是其中之一。我假设每次输入值更改时,都会调用
sendRequest()
,并且
currentValue
会更改其值。当然,您可以使用第一段代码,但在这种情况下,在获得ajax响应之前,您不能调用
sendRequest()
。就这些……那不是真的。两个函数调用的局部变量之间没有连接。每个函数调用都有自己的独立环境。试试这个简单的例子:
函数sendRequest(inputValue){setTimeout(function(){console.log(inputValue);},1000);};发送请求(21);发送请求(42)根据您的说法,它应该记录42次(但它没有)。您是对的,我有一个类似的问题,但在我的例子中,变量是在函数外部创建的。谢谢你的解释。
function sendRequest(inputValue){
    (function(val){
        $.ajax({
            // Your options
        })
        .done(function(data) {
            if (val == $("#yourInput").val()) {
                // Do something..
            }
        });
    })(inputValue); // Pass 'inputValue' to self-invoking function as 'val'
}