1

如何修改以下内容,以便forminput是一个接受用户输入的文本区域表单框,而不是像现在这样硬编码?

提交表单后,它将在以下代码中填充表单输入:

data: JSON.stringify({json:*forminput*}), 

在 textarea 框中,将完全按照下面的 javascript 粘贴数据。

<html>
<head>
    <title></title>
</head>
<body>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">

    $(document).ready(function () {
        $("#postit").on("click", function () {

            var forminput = [{
                  "field1":"100",
                  "field2":"2000",
                  "field3":"400",
                },
                {
                  "field1":"110",
                  "field2":"2200",
                  "field3":"520"
                }];


            $.ajax({
                type: "POST",
                contentType: "application/json; charset=utf-8",
                url: "http://localhost/capturedata",
                data: JSON.stringify({json:forminput}),
                dataType: 'json',
                success: function (data) {

                }
            });
        });
    });
</script>
<a href="#" id="postit">Submit</a>

</body>
</html>
4

2 回答 2

2

整个想法没有意义,因为用户可能输入的值可能不是有效的 JSON。在问题中,您说“数据将完全按照下面的 javascript 粘贴” - 但如果不是,怎么办?或者如果用户输入的内容有效的 JSON 但与您期望的格式不一样怎么办?用户可能会输入{"this":"is valid json"},它会被接受并提交,但不是您的服务器所期望的。

话虽如此,要从字面上理解您的要求,您可以通过在页面上的某处添加以下内容来实现它:

<textarea id="forminput"></textarea>

然后在您的 JS 函数中,您可以通过以下方式获取值:

var forminput = $("#forminput").val();

...这会给你一个字符串的值。如果您想将其用作一个对象,就像您使用forminput问题中当前显示的变量一样,它需要是:

var forminput = $.parseJSON( $("#forminput").val() );

因此,为了解决我关于用户输入无效值的观点,您可以执行以下操作:

try {
    var forminput = $.parseJSON( $("#forminput").val() );
    // use forminput
} catch (e) {
    alert("Invalid input: " + e.message);
}

...但即使这样也只会捕获一般的无效 JSON 错误,它不会捕获用户为您的需要输入错误格式的有效 JSON 的情况。

于 2013-10-07T03:39:54.193 回答
1

如果用户以相同格式粘贴值(连同括号和波浪括号),只需添加以下 HTML

<textarea>

</textarea>

然后改变

var forminput = [{
                  "field1":"100",
                  "field2":"2000",
                  "field3":"400",
                },
                {
                  "field1":"110",
                  "field2":"2200",
                  "field3":"520"
                }];

var forminput = $("textarea").val();
var forminput = $.parseJSON(forminput);
于 2013-10-07T04:08:07.010 回答