.each循环中的JQuery数据格式

时间:2014-01-01 08:18:28

标签: jquery coffeescript

我有动态数量的div需要格式化为存储在数据库中的数据。 div格式中的每一种都是:

<div class="spec-list-row row row-5">
                        <input type="text" class="spec_name" placeholder="nama spec" />
                        <input type="text" class="spec_value" placeholder="isi spec" />
                    </div>

在提交时,每个spec-list-row数据应该格式化为这样(如果有2个spec-list-row):

{"spec_name_1":"spec_value_1","spec_value_2":"spec_value_2"}

相反,它的格式如下:

{"spec_name_1":"spec_value_1","spec_value_2":"spec_value_2",} {"spec_name_1":"spec_value_1","spec_value_2":"spec_value_2",}

我生成数据的代码就是这个(在coffeescript中):

spec_str += "{"

            $("div.spec-list-row").each ->
                spec_str += '"' +  $(this).find("input.spec_name").val() + '":"' + $(this).find("input.spec_value").val() + ","

            spec_str += "}"

修改

我通过将我的代码更改为:

来解决它
$("button[add-product]").click (e) ->
    error = false

    $("form#add-product-form input[required]").each ->
        if $(this).val() is null or $(this).val() is ""
            alert "* needs to be filled"
            error = true
            false

    unless processing
        if not error
            e.preventDefault()
            processing = true

                    ### solution from here ###
            specObj = new Object()

            $("div.spec-list-row").each ->
                specObj[$(this).find("input.spec_name").val()] = $(this).find("input.spec_value").val()

            spec_str = JSON.stringify specObj
                    ### to here ###

            fd = new FormData()
            fd.append "image", image_file
            fd.append "data", $("form#add-product-form").serialize()
            fd.append "specs", spec_str

            $.ajax({
                type: 'POST'
                processData: false
                contentType: false
                data: fd
                url: base_link+'add_product'
                cache: false
                timeout: 15000
            }).done (msg) ->
                alert msg
                processing = false
            .fail (res) ->
                alert res.responseText
                processing = false

感谢您的评论,它给了我一个提示(即使我发现它很苛刻,很确定这是出于我的正当理由)。

0 个答案:

没有答案