我有一个代码,一旦点击一个按钮就会从文本框中获取值,通过外部数据库运行它,然后将结果返回给我。然后将该结果放入另一个文本框中。
我的问题是我的编码花了太长时间(至少我认为这是问题)从外部数据库获取结果,并在文本框未准备好时设置它的值。
<script type="text/javascript">
// Declaring the variable.
var mname = "";
$('#btnMN').click(function() {
//Pull data from name
var name = $(this).closest('tr').find(':input[type="text"][name="name[]"]').val();
//Run through database
$.post('test1.php', { name: name}, function(data){
mname = data;
});
//Set text box with return data
$(this).closest('tr').find('.master').val(mname);
mname = "";
});
</script>
我不能把“设置带有返回数据的文本框”部分放在另一个函数中,因为我将丢失“this”选择器,告诉它确切地设置哪个文本框,因为我有一个动态表单,我可以添加/将行删除到。
<tr id="input_11" style="margin-bottom:4px;" class="clonedInput">
<td valign="top" align="right" style="padding-right: 10px;"><span style="color:#00CD00;"><BR>Victim:</span></td>
<td valign="top">Name:<input type="text" name="name[]" size="35"/><input type="button" id="btnMN" value="Mastername Check" /></td>
<td class="master">Mastername:<textarea readonly class="master" name="master[]" rows="8" cols="28"></textarea></td>
<td>Statement:<textarea name="statement[]" rows="8" cols="28" placeholder="Paste statement here."></textarea></td>
</tr>
答案 0 :(得分:6)
$.post()
是一个异步(即“ajax”中的“a”)调用。因此它发送请求但在等待响应时继续处理函数的其余部分。任何基于该响应的东西都必须在callaback中。
$('#btnMN').click(function() {
//Pull data from name
var name = $(this).closest('tr').find(':input[type="text"][name="name[]"]').val();
//Store element we want to update
var master = $(this).closest('tr').find('.master');
//Run through database
$.post('test1.php', { name: name}, function(data){
master.val(data);
});
});
答案 1 :(得分:1)
在回调函数中设置值 。
$.post('test1.php', { name: name}, function(data){
$(this).closest('tr').find('.master').val(data);
});