jQuery将选项附加到select元素,然后将它们取回

时间:2016-03-20 20:07:02

标签: jquery ajax select option

不知道'范围'是否真的是正确的术语,但我想知道是否有人可以解释为什么这不像我期望的那样工作。

https://jsfiddle.net/jmillsy/uucf5xmb/1/

如果我移动

$('.myclass option').each(function() {
  $('#output').append($(this).val());
});

在always()块内,它的工作方式与我预期的一样。

2 个答案:

答案 0 :(得分:1)

像这样使用它会起作用:

$.ajax({
  type: "POST",
  url: "localhost:8080/404",
  dataType: 'json',
  data: {}
}).always(function(data) {

  $('.myclass').append(
    "<option value='op1'>Option 1</option>"
  );

  $('.myclass').append(
    "<option value='op2'>Option 2</option>"
  );
}).complete(function() {
  $('.myclass option').each(function() {
    $('#output').append($(this).val());
  });
});

问题是您的代码没有按照您的想法运行,当您执行此操作时,选项尚未呈现

<强>更新

也可以使用async的其他版本,是的:是的。)

答案 1 :(得分:0)

问题是您的Ajax调用是异步的。这意味着调用后的代码会在调用后立即执行,因此在您的选择中有任何选项之前。

您可以通过在ajax选项中将选项async指定为false来更改此设置。这样,将附加option,然后将执行在output块中列出它们的代码。