我正在尝试使用ajax调用设置js var。然后将var值输入到表单元素中。 它工作正常,直到我尝试使用var如下所示的方式。
我用来获取val的函数
function ajaxFetch(query) {
var val;
$.post( "/ajax/crud.php",{mode:"fetch",query:query},function(data) {
val=data;
});
return val;
}
我将跳过crud.php代码,因为它适用于另一个脚本,它只查询MySQL,并回显值。
然后我调用点击
触发的ajaxFetch函数$(document).on("click",".btnCall",function(){
id=$(this).data("id")//gets an id from a data tag
q1 = "SELECT NAME FROM user WHERE ID="+id;
userName = ajaxFetch(q1);
$("#form_userName").val(userName);
});
我无法理解,但我想这是一个范围问题,是以下
如果我按照方式显示,表格仍为空
如果我在点击触发器内进行直接ajax调用(不调用 功能),表单填写用户名。
如果我按照上面显示的方式做事,但是我在ajaxFetch函数中添加了一个“alert(val)”(我用这个来测试函数),警告会是 “未定义”但表单将填充值。
我以这种方式遇到了问题:我首先在“点击”事件中进行了ajax调用。然后我创建了ajaxFetch函数,因为会有几个调用。我为功能和“点击”事件添加了“警报”,因此我可以看到fetch是否正常工作。 我注意到的第一件事是第一个警报(在ajaxFetch中)是空的,但是click事件中的警告显示了值。
提前致谢。对不起任何错误
编辑 - 工作方式(使用不需要的提醒)
function ajaxFetch(query) {
var val;
$.post( "/ajax/crud.php",{mode:"fetch",query:query},function(data) {
val=data;
alert(data);
});
return val;
}
$(document).on("click",".btnCall",function(){
id=$(this).data("id")//gets an id from a data tag
q1 = "SELECT NAME FROM user WHERE ID="+id;
userName = ajaxFetch(q1);
alert(userName)
$("#form_userName").val(userName);
});
这样,表单值将归档。第一个警报将显示空字符串,第二个警报将显示正确的值。
最终编辑 - 处理Ajax请求
function ajaxFetch(query) {
var r;
$.ajax({
type:'POST',
url:'/ajax/crud.php',
async:false,
data:{mode:"fetch",query:query},
success: function(response){
r=response;
}
});
return r;
}
这种方式(添加选项“async:false”)var将仅在ajax完成请求时填充。不是真正的专业提示,但可以帮助其他初学者。
答案 0 :(得分:0)
将val
退回到$.post
这个喜欢此功能的功能中。
function ajaxFetch(query) {
var val;
$.post( "/ajax/crud.php",{mode:"fetch",query:query},function(data) {
val=data;
//return statement should be here and not out side the ajax function
return val;
});
}
}
答案 1 :(得分:0)
答案是您在返回时使用val
undefined
。val
您应该执行在回调函数中使用function ajaxFetch(query) {
return $.post( "/ajax/crud.php",{mode:"fetch",query:query});
}
//and where you call ajaxFetch()
ajaxFetch().then(function(data) {
val=data;
//do something with val here
});
的所有逻辑,在其他情况下,您无法知道请求何时完成。我建议你使用它:
returnText = []
returnText = driver.execute_script("return document.evaluate(\"//span[@class='tableNode']/text()[preceding-sibling::br and following-sibling::br]\", document, null, XPathResult.STRING_TYPE, null).stringValue;")
for item in returnText:
print item
答案 2 :(得分:0)
您正在执行异步Ajax调用。因此,您必须按如下方式修改代码:
function ajaxFetch(query) {
var val;
$.post( "/ajax/crud.php",{mode:"fetch",query:query},function(data) {
val=data;
$("#form_userName").val(val); //set the value right in success handler of Ajax
});
}
$(document).on("click",".btnCall",function(){
id=$(this).data("id")//gets an id from a data tag
q1 = "SELECT NAME FROM user WHERE ID="+id;
ajaxFetch(q1); //just call the function; you don't know how much time Ajax will take to get back the result.
});
答案 3 :(得分:0)
请尝试此代码
<PropertyGroup>
<Win32Resource>assemblyWin32.res</Win32Resource>
</PropertyGroup>
因为它是异步的,所以使用回调函数