使用jQuery考虑以下函数:
function getVal() {
jQuery.get('/relative/url/', function (data) {
return data.getElementById('myInput').value;
}
}
这基本上就是我想要做的,但我不知道应该怎么做。 我知道的唯一方法是涉及框架或innerHTML,我不能使用它,因为我必须等待元素准备好。唯一的方法是使用回调,这个函数必须返回元素的值而不是其他东西。 我的逻辑可能在这里有问题,所以请随时纠正我。
答案 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()
});
});
}
}