Unable to send unique product id using jquery ajax

时间:2015-12-17 13:17:41

标签: jquery ajax django

i am trying to send product id using ajax but i am getting same id always

{% for product in products %}

    <div id="product">
    <a href = '#'>
    {{ product.id }}


<form id="productfrm"> 
<input type = "hidden" name = "productid" value="{{ product.id }}">
</form>
</a>
</div>

{% endfor %}

here is the ajax script

<script type="text/javascript">
    $(document).ready(function(){
        $('#product>a').on('click',function(){ 
            event.preventDefault();   
            var fData = $("#productfrm").serialize();
            console.log(fData)
            $.ajax({        
                type: "GET",
                url: "{% url 'storeView'  user=store.user %}",
                data: fData,
                success: function(data){   
                    alert('success');
                },

                 error: function(response, error) {
                    alert(error);  
                }
            });
        })
    });
</script>

what can i do to send unique product id on the click of div thanks in advance

2 个答案:

答案 0 :(得分:1)

你真的好像不需要这里的表格。如果你想根据点击的productId获取一些数据,只需在你的超链接上有一个onclick监听器:

{% for product in products %}
    <a href = '#' onclick="getStoreView(e, {{ product.id }})">
    {{ product.id }}
    </a>
{% endfor %}

然后在你的js中,有这个功能:

<script type="text/javascript">
    function getStoreView(event, productId) {
        event.preventDefault();   
        console.log(fData);
        // Send productId as query param of url
        $.ajax({        
            type: "GET",
            url: "{% url 'storeView'  user=store.user %}",
            data: fData,
            success: function(data) {
                alert('success');
            },

            error: function(response, error) {
                alert(error);  
            }
        });
    });
</script>

答案 1 :(得分:0)

与Rohit评论一样,您不应在页面上多次使用相同的ID。每当您的循环呈现产品时,它将打印一个带有ID&#34; productfrm&#34;的表单。您正在使用它作为fData var的选择器,这是您的脚本出错的地方。 jQuery不知道使用这个选择器你正在寻找当前产品中的表单。

您可以做的一件事是从表单中删除ID。然后改变

var fData = $(this).find('form').serialize();

Surface with size (w=1920, h=1080) and format 0x1 is not valid, 
size not in valid set: [1920x1088, 1440x1088, 1456x832, 1088x1088,
1280x720, 960x720, 960x544, 720x720, 800x480, 768x464, 720x480, 
768x432, 640x480, 544x544, 576x432, 640x384, 640x368, 480x480, 
480x320, 384x288, 352x288, 320x240, 240x160, 176x144]

那应该做的工作。但是,将表单放在锚标记中并不是一种好习惯。