我正在尝试在PHP中发布一些JSON数据。但是出了点问题。
这是我的HTML -
<tbody>
{% for x in sets %}
<tr class="">
<td>
<div class="form-group">
{% if x is defined %}{{x}}</div>{% else %}{% endif %}
</td>
<td><input type="number" class ="first" name ="first"></td>
<td><input type="number" class ="second" name ="second"></td>
<td><span id="txtData"></span></td>
</tr>
{% endfor %}
</tbody>
这是我的脚本
<script>
$(document).ready(function () {
$("#scoreForm").on('submit', function (e) {
$("#submit").show();
var data = $(this).serialize();
data['first'] = $('#first').val();
data['second'] = $('#second').val();
$.ajax({
url: '/processdata',
type: 'post',
data: JSON.stringify({ Frames : data }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (returnedData) {
所以当我发布数据时,它看起来像是这样---
我想要的是当我发布数据---
["frames": {"first":6, "second": 7}, {"first": 4, "second": 9}]
有谁知道我在哪里弄错了! 任何建议都会非常明显......
答案 0 :(得分:2)
var data = $(this).serialize();
这会将表单数据转换为字符串。
data['first'] = $('#first').val(); data['second'] = $('#second').val();
然后尝试向字符串添加属性,但仅针对DOM中每个元素的第一个匹配。
对此的简单解决方案是不使用JSON 。
[]
中的结尾,以处理PHP独特的表单处理系统data['first'] = $('#first').val();
data: JSON.stringify({ Frames : data }),
更改为data: data
contentType: "application/json; charset=utf-8",
$_POST
读取而不是期待JSON格式化请求如果您真的想使用JSON,那么您需要自己构建数据结构。
您还会发现在work properly时制作表单JS fails还需要做更多工作。
[&#34;帧&#34;:{&#34;第一&#34;:6,&#34;第二&#34;:7},{&#34;第一&#34;:4,& #34;第二个&#34;:9}]
......但这不是有效的JSON。
你需要更像的东西:
{"frames": [ {"first":6, "second": 7}, {"first": 4, "second": 9} ]}
var data = []
)var rows = jQuery('tr')
是一个开头,但您可能希望更具体rows.each(function () { data.push({ first: jQuery(this).find("[name=first]").val(), second: jQuery(this).find("[name=second]").val() });