【问题标题】:Ajax For HTML Generated From Javascript从 Javascript 生成的 HTML 的 Ajax
【发布时间】:2021-03-19 22:59:48
【问题描述】:

我有从 Javascript 生成的 html 来创建项目列表。我还需要对每个项目调用 Jquery Ajax 调用,但由于它不在页面准备好的 html 中,我认为这可能是不调用 Ajax 的原因。当我单击提交按钮时,它会尝试刷新页面,因此这表明阻止默认设置没有运行。

编辑:拼写

我在这里做错了什么?

生成 HTML 的 Javascript:

buildCollectionList()
    
    function buildCollectionList(){
        var url = 'http://localhost:8000/api/collection_items_list/'
        fetch(url)
            .then((resp) => resp.json())
            .then(function(data){
                for (var x in data){
                    var wrapper = document.getElementById(`collection_scroll${data[x].post}`)
                    
                    var product = wrapper.getAttribute('name')
                    //console.log(product)
                    wrapper.innerHTML = ''
                    

                    /*fetch(url)
                    .then((resp) => resp.json())
                    .then(function(data){
                        console.log('Data:', data)*/

                    var list = data
                    for (var i in list){

                        if ((list[i].saved == true) && (list[i].post == product)){
                            var item = `
                            <div class="collection_save_container">
                                <div class="collection_save_name">${list[i].parent_collection_name}</div>
                                        
                                    <form class="collection_save_form" action="" method="POST" id="${list[i].collection}" name="${list[i].post}">
                                                                            
                                        <button type="submit" class="collection_save_btn saved" id="save_btn ${list[i].collection} ${list[i].post}"><div class="saved_text ${list[i].collection}">Saved</div></button>
                                                                                            
                                    </form>
                                </div>
                                        
                            </div>

                        `
                        wrapper.innerHTML += item
                        } else if (list[i].post == product){
                            var item = `
                            <div class="collection_save_container">
                                <div class="collection_save_name">${list[i].parent_collection_name}</div>
                                        
                                    <form class="collection_save_form" action="" method="POST" id="${list[i].collection}" name="${list[i].post}">
                                                                            
                                        <button type="submit" class="collection_save_btn" id="save_btn ${list[i].collection} ${list[i].post}"><div class="saved_text ${list[i].collection}">Save</div></button>
                                        
                                    </form>
                                </div>
                                        
                            </div>
                        `
                        wrapper.innerHTML += item

                        }

                        
                        

                    }
                    //})
                }
            })
    }

Jquery Ajax:

$(document).ready(function() {
            
    $('.collection_save_form').submit(function(e){
        e.preventDefault()

        //const url = $(this).attr('action')
        const url = "{% url 'savepost' 0 1000 %}"
        const post_id = $(this).attr('name')
        const collection_id = $(this).attr('id')
        const text = $(`.saved_text ${collection_id}`).text()
        var saveElement = document.getElementById(`save_btn ${collection_id} ${post_id}`);
            
        real_url = url.replace('0', post_id).replace('1000', collection_id);

        $.ajax({
            type: 'POST',
            url: real_url,
            data: {
                'csrfmiddlewaretoken': $('input[name=csrfmiddlewaretoken]').val(),
                'post_id': post_id,
                'collection_id': collection_id,


            },
            success: function(response){
                if (saveElement.classList.contains("saved")){
                    
                    saveElement.classList.remove("saved")
                    $(`.saved_text${collection_id}`).text('Save')

                } else if (!saveElement.classList.contains("saved")) {
                        
                    saveElement.classList.add("saved")
                        $(`.saved_text${collection_id}`).text('Saved')
                    }


                console.log(post_id)

                    
                },
                error: function(response){
                    console.log('error', response)
                }
            })

        })



    });

    

【问题讨论】:

  • 你检查过.collection_save_form 找到了吗?如果您提供MRE,人们会更愿意提供帮助
  • 您好,您的表单是动态生成的,您可以将这个$('.collection_save_form').submit(function(e){ 更改为$(document).on("submit",".collection_save_form",function(){ //your codes ..}),然后再试一次

标签: javascript jquery django ajax


【解决方案1】:

对于任何有类似问题的人:我通过在由 javascript 生成的 html 中放置一个 onclick 事件来解决这个问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 2013-12-07
    • 2012-06-19
    • 2013-05-04
    • 2016-08-11
    • 1970-01-01
    • 2011-02-27
    相关资源
    最近更新 更多