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

时间:2015-04-15 23:07:58

标签: javascript jquery ajax

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

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

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

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

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

我可以在响应数据中包含请求值,但似乎应该有一种方法可以在不更新API的情况下执行此操作。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

如果正确解释问题,请尝试使用input event?价值应该总是不同?如果要求缓存值,那么确定返回值是否与缓存中的值不同,创建缓存对象?

$(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)
        })
    });
});

jsfiddle http://jsfiddle.net/eaq3x0ur/

答案 2 :(得分:-1)

您应该将当前输入值存储在变量中,然后检查它是否等于其当前值。由于ajax请求是异步的,因此您无法以这种方式将该值存储在变量中

function sendRequest(inputValue){
    var currentValue = inputValue;
    $.ajax({ })
        .done(function(data) {
            // currentValue could be changed
        });
}

相反,您需要将该变量绑定到self invoking function,然后检查它是否等于.done的当前输入值。

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

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