无法将表单参数发送到服务器

时间:2013-10-15 13:43:23

标签: javascript jquery spring-mvc

我们遇到的问题是,当通过javascript提交表单时,其中一个参数(invoiceCodes)不会发送到服务器。以下是javascript代码的片段。

流程如下。当用户点击“打印”按钮时,调用validateTransition()方法,我们进行ajax调用。在回答了ajax之后,我们打电话给couponPopup(url, invoiceCodes)。在此函数中,我们提交newWinForm但有时invoiceCodes参数将被发送为空。

在这种情况下,checkForInvoiceCode也是如此,要求用户输入发票代码

我们以何种方式将价值观置于可能导致invoiceCodes有时不被发送的形式方面是否有任何错误。

function couponPopup(url, invoiceCodes)
{
    var selectedOrders = '';
    $(".selectedOrder:checked").each(function() {
        selectedOrders += $(this).val() + ',';
    });

    var frm = document.forms["newWinForm"];
    frm.action = url;
    frm.selectedShipments.value= selectedOrders; 
    frm.invoiceCodes.value = invoiceCodes; 
    console.log("Selected orders are "+selectedOrders);
    console.log("Invoice codes with them in order are "+invoiceCodes);
    document.getElementById("hiddenInvoiceCodes").value=invoiceCodes;
    document.getElementById("hiddenselectedShipments").value=selectedOrders;
    frm.submit();
    return false;
}

function validateTransition() {
    $('#statusChangeSuccess').hide();
    $('#statusChangeFail').hide();

    var selectedOrders = '';
    var invoiceCodes = '';
    var flag = 0;
    var spaceError = 0;
    var commaError = 0;

    $(".selectedOrder:checked").each(function() {
        selectedOrders += $(this).val() + ',';
        <c:if test="${checkForInvoiceCode}">
        var emptyPattern = /^\s*$/;
        var commaPattern = /,/;
        var inv_code = $("#invoice-code-" + $(this).val()).val().trim();
        if (emptyPattern.test(inv_code)) {
            spaceError = 1;
            flag = 1;

        }
        if (commaPattern.test(inv_code)) {
            commaError = 1;
            flag = 1;

        }
        invoiceCodes += inv_code + ",";
        </c:if>
    });

    if(selectedOrders=='') {
        alert('Please select at least one order');
        return false;
    }

    if ( flag ) {
        if ( commaError ) {
            alert('One or more specified codes have comma, please remove comma from them');
        }
        if ( spaceError ) {
            alert('One or more specified codes has been left blank, please fill them up');
        }
        if ( !commaError && !spaceError ) {
            alert('Please contact tech');
        }

        return false;
    }

    var inputdata = {"selectedShipments" : selectedOrders,
        "statusCode" : "PRINT"
    };

    //this is where we are making an ajax call 
    jQuery(function($){
            setTimeout(function(){                      
                var ajaxUrl = '/product/update/';

                $.ajax({url:ajaxUrl, type: "POST", dataType: 'json', data:inputdata , success: function(data) {
                    if(data['status'] == 'success') {
                        //couponPopup function is called where form is submitted
                        couponPopup("${path.http}/product/print/", invoiceCodes);
                        $('#statusChangeSuccess').html(data['message']).show();

                        $(".selectedOrder:checked").each(function() {
                            $("#row-" + $(this).val()).remove();
                        });

                    } else{
                        $('#statusChangeFail').html(data['message']).show();
                    }
                }});
        }, 10 );
    });

    return false;
}

<form id="newWinForm" name="newWinForm" action="" method="post" target="_blank" >
    <input type="hidden" id="hiddenselectedShipments" name="selectedShipments" value="" />
    <input type="hidden" id="hiddenInvoiceCodes" name="invoiceCodes" value="" />
</form>

表单的控制器。即使我们从客户端发送,发票代码有时也是空的。

@RequestMapping("/product/print")
public void printSelectedPendingOrders(@RequestParam("selectedShipments") String selectedShipments,
        @RequestParam(defaultValue = "", value = "invoiceCodes", required = false) String invoiceCodes, ModelMap modelMap, HttpServletResponse httpResponse)
        throws IOException, DocumentException, ParserConfigurationException, SAXException {

0 个答案:

没有答案