我的表单中有以下输入字段:
<input type="hidden" name="editShapeStatus" id="editShapeStatus" value="keep" />
用户可以执行多个可以改变输入值的操作。
jquery改变值的函数:
$('#editShapeStatus').val("lto");
现在它变得有趣了。虽然表单有method="POST"作为属性,但服务器接收到的是GET请求。但只有当editShapeStatus的值被jQuery改变。它会变得更好:
目前可修改为"lto"answers"uls"。如果我使用firebug手动将状态更改回"keep",服务器将收到一个正常的POST请求。如果我手动将值更改为其他两个值中的任何一个,服务器将接收一个GET请求。即使更改可以作为值传递给输入的状态名也不起作用。这只会导致这两个新命名的状态导致相同的错误。有趣的是,手动将值更改为任何其他字符串都可以正常工作。即使我更改了"lto"answers"uls"的状态名,也可以使用这两个状态名,但不能使用新名称。
所以我想这一定和jQuery有关。但我用它来改变上面列出的值的唯一方法。
有什么建议吗?
编辑:的形式:
<form role="form" method="POST" action="{{ path('save_border') }}">
<div class="form-group">
<input type="hidden" name="borderId" id="borderId" value="{{ border.id }}" /> {# here it tells the controller that we have an existing border to edit #}
<input type="hidden" name="editShapeStatus" id="editShapeStatus" value="keep" />
<input type="hidden" name="toLink" id="toLink" value="no" />
<input type="hidden" name="shapeId" id="shapeId" value="{{ border.borderShape.id }}" />
</div>
<div class="form-group">
<input class="form-control" type="hidden" name="vertices" id="vertices" required /> {# here the vertices need to be stored #}
</div>
<div class="form-group">
<input class="form-control" type="text" name="countryName" id="countryName" placeholder="Germany" value="{{ border.name }}" required />
</div>
<div class="form-group">
<div class="input-group">
<input class="form-control" type="number" name="year" id="year" placeholder=1868 value="{{ border.year }}" required />
<input type="hidden" name="adbcValueMeta" id="adbcValueMeta" value="{% if border.year < 0 %}bc{% else %}ad{% endif %}" />
<span class="input-group-btn">
<button type="button" class="btn btn-default" id="adbcSwitcherMeta">{% if border.year < 0 %}BC{% else %}AD{% endif %}</button>
</span>
</div>
</div>
<div class="form-group">
<textarea class="form-control" name="description" id="description" placeholder="Description">{{ border.description }}</textarea>
</div>
<div class="form-group">
<button class="btn btn-success pull-right" type="submit" id="submitCountryBorderButton">
<span class="glyphicon glyphicon-ok-sign"></span> Save
</button>
</div>
</form>
改变#editShapeStatus值的函数:
$(document).on('click', '#useShapeForEditing', function() {
$('#editShapeStatus').val("uls");
});
#userShapeForEditing按钮被动态创建。
Symfony在找不到GET路由时返回的响应不太准确。这实际上是对一个不再存在的实体的方法的调用。我不知道Symfony是如何将其视为路由问题的,因为路由引用的控制器确实被调用了。
奇怪的行为,我认为是由jquery引起的,实际上只是控制器的结果,谁只执行说不存在的方法时,在editShapeStatus的值是正确的(如果- else)。
使用您提供的jsfield,我单击link
,值发生了变化,如下所示。然后我点击保存并制作了POST
…not a GET
:
Remote Address:162.243.204.190:80
Request URL:http://fiddle.jshell.net/border/save/
Request Method:POST
Status Code:404 NOT FOUND
Request Headersview source
..........
Form Data:
borderId:12
editShapeStatus:uls
toLink:no
shapeId:38
vertices:
countryName:Poland
year:1868
adbcValueMeta:ad
description:blabla
并且我还确认当值为:keep
时发出POST
请求。
因此,jQuery与请求方法从POST
更改为GET
无关。我们必须另寻他处!