Javascript 如何在done/success ajax函数中访问ajax请求数据?
我有一个文本输入,其值不断变化 每次值更改时,都会发出一个ajax请求 因为文本输入的值是不断变化的,当ajax请求成功返回时,我想确定文本输入的当前值是否与我在ajax请求数据中发送的值相同 我没有看到任何示例显示如何从ajaxdone/success函数中访问请求数据 如何在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() {
我可以在响应数据中包含请求值,但似乎有一种方法可以做到这一点,而无需更新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'
}