AJAX ResponseText为DOM?

时间:2011-07-11 15:56:53

标签: javascript jquery ajax dom

使用jQuery考虑以下函数:

function getVal() {
    jQuery.get('/relative/url/', function (data) {
        return data.getElementById('myInput').value;
    }
}

这基本上就是我想要做的,但我不知道应该怎么做。 我知道的唯一方法是涉及框架或innerHTML,我不能使用它,因为我必须等待元素准备好。唯一的方法是使用回调,这个函数必须返回元素的值而不是其他东西。 我的逻辑可能在这里有问题,所以请随时纠正我。

6 个答案:

答案 0 :(得分:2)

首先,使用当前结构,您应该使用回调来返回值。要解析通过AJAX检索的HTML字符串,您可以将其传递给jQuery,然后像往常一样查询它。

function getVal(callback) {
    jQuery.get('/relative/url/', function (data) {
        callback($(data).find('#myInput').val());
    }, 'html');
}

然后,当您调用函数getVal时,您需要提供回调:

getVal(function(input_val) {
    /**
     * This code will be run once the GET request finishes.
     * It will be passed one parameter - the value of #myInput in the HTML
     * response to the request (see getVal function).
     */

    alert(input_val);
});

答案 1 :(得分:0)

不,你不能这样做..因为它是异步调用。您需要的是为您提供代码回调,以返回值

function getVal(callback) {
    jQuery.get('/relative/url/', function (data) {
        callback(data.getElementById('myInput').value);
    }
}

getVal(function (value) {
  alert(value);
});

答案 2 :(得分:0)

如果它是有效的html标记,您可以使用浏览器使用选择器浏览其xml:

*[id=myInput]

或者您只需在页面中的某个虚拟元素上呈现标记,然后进行查找:

function getVal() {
    jQuery.get('/relative/url/', function (data) {
        dummyNode.innerHTML = data; //not sure data points to responseTxt
        return getElementById('myInput').innerHTML;
    }
}

答案 3 :(得分:0)

除非将元素添加到dom树中,否则不能这样做。

function getVal() {
    jQuery.get('/relative/url/', function (data) {
        return $(document.body).append(data).find('#myInput').val();
    }
}

答案 4 :(得分:0)

那里有几个问题。首先,你不能像这样回调return。您只需返回匿名函数本身,而不是getVal()方法。

要解决此问题,您可以返回jXHR对象并应用一些魔法:

function getVal() {
    return jQuery.get('/relative/url/');
}

getVal().done(function (data) {
    var val = $( data ).find('#myInput').val();
    // do something with val
}

我不知道data的结构如何,但它应该是这样的。如果没有,可能因为myInput而在顶层。在这种情况下,请将.find()替换为.filter()

答案 5 :(得分:0)

哦,好吧。我懂了。我认为我没有提供足够的信息。我认为语境无关紧要。好的,这是一个描述我的解决方案的例子。

function getVal() {
    $.get('/relative/url/', function (data) {
        $.get('relative/url/2', function (data2) {
            var data_obj = [];
            data_obj.push({
                "data_1":data[i].name
            }, {
                "data_2":$(data).find('#myInput').val()
            });
        });
    }
}