javascript - Jquery不 append html的特定部分

标签 javascript jquery html append

我有以下代码:

let html = '<h2 class="text-center">Опции</h2>'
     html += '<div class="col-md-4 col-md-offset-4">'
        html += '<div class="form-group">'
           html += '<select name="options" id="options-select" class="form-control">'
              html += '<option value="">-- Изберете опция --</option>'
                 //for loop for options
                 for(product_option of data.options) {
                    for(product_option_value of product_option.product_option_value) {
                        $.ajax({
                            url: '<?= $get_option_link ?>&token=<?= $token ?>',
                            type: 'POST',
                            data: {option_value_id: product_option_value.option_value_id}
                        })
                        .done(function(option) {
                            option = JSON.parse(option)
                            console.log(product_option.name + ' - ' + option.name)
                            html += '<option value="'+product_option_value.product_option_value_id+'">'+ product_option.name + ' - ' + option.name +'</option>'
                        })
                        .fail(function() {
                            console.log("error")
                        })
                        .always(function() {
                            console.log("complete")
                        })
                    }
                }
            html += '</select>'
        html += '</div>'
    html += '</div>'

    $('#products').val('')

    if (data.options.length > 0) {
        $('#product-options').append(html)
    }

它会 append 除了 for 循环中的 html 之外的所有内容。我通过控制台记录了 objest 来检查它们,即使是 html += '<option...' 之前的 console.log 也都很好。部分工作正常,因此我确信循环中的代码已被处理。

编辑:加上检查器的控制台中没有错误

最佳答案

那是因为你调用 Ajax 异步函数,这意味着它将在稍后执行......在你的循环完成并且 html 变量已经设置之后......

尝试像这样改变你的ajax...

 $.ajax({
                        url: '<?= $get_option_link ?>&token=<?= $token ?>',
                        type: 'POST',
                        data: {option_value_id: product_option_value.option_value_id}
                    })
                    .done(function(option) {
                        option = JSON.parse(option)
                        console.log(product_option.name + ' - ' + option.name)
                        $('#options-select').append('<option value="'+product_option_value.product_option_value_id+'">'+ product_option.name + ' - ' + option.name +'</option>');
                    })

关于javascript - Jquery不 append html的特定部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46279640/

相关文章:

javascript - 在 Javascript 中,如何使用 '/' 和 '/g' 内的变量对字符串执行全局替换?

Javascript 从变量中提取日期

javascript - 填充一些文本后如何在 Canvas 上设置高度?

javascript - 如何将对象键添加到原型(prototype)中?

javascript - 读取行: read three input line-by-line then loop if true

javascript - jQuery 以字符串形式获取 DOM 元素

javascript - Ajax 加载内容,jquery 效果不起作用

javascript - 无法在 HighChart 中正确绘制 x 轴

html - 如何使用 CSS 在 BR 标签后添加 em 空格 ( )

javascript - 类型错误 : undefined is not an object