如何修改以下内容以便 forminput 是一个textarea表单框,它接受用户输入,而不是现在的硬编码?
提交表单后,它将在以下代码中填充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>
答案 0 :(得分: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以满足您的需求的情况。
答案 1 :(得分: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);