0

我们遇到了一个问题,其中通过 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 {
4

0 回答 0