jquery改变输入值后,Symfony2控制器无法识别POST请求


Symfony2 Controller does not recognize POST request after jquery changed input value

我的表单中有以下输入字段:

<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无关。我们必须另寻他处!