Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php jquery更改输入值后,Symfony2控制器无法识别POST请求_Php_Jquery_Symfony_Post_Get - Fatal编程技术网

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

Php jquery更改输入值后,Symfony2控制器无法识别POST请求,php,jquery,symfony,post,get,Php,Jquery,Symfony,Post,Get,我的表单中有以下输入字段: <input type="hidden" name="editShapeStatus" id="editShapeStatus" value="keep" /> 现在它变得有趣了。尽管表单具有method=“POST”属性,但服务器接收GET请求。但是只有当editShapeStatus的值被jQuery更改时。A它会变得更好: 目前,该值可以更改为“lto”和“uls”。如果我使用firebug手动将状态更改回“keep”,服务器将收到一个正常的POS

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

<input type="hidden" name="editShapeStatus" id="editShapeStatus" value="keep" />
现在它变得有趣了。尽管表单具有method=“POST”属性,但服务器接收GET请求。但是只有当editShapeStatus的值被jQuery更改时。A它会变得更好:

目前,该值可以更改为“lto”和“uls”。如果我使用firebug手动将状态更改回“keep”,服务器将收到一个正常的POST请求。如果我手动将该值更改为其他两个值中的任何一个,服务器将收到GET请求。即使更改可以作为值传递给输入的状态名称也不会起作用。这只会导致这两个新命名的状态导致相同的错误。有趣的是,手动将该值更改为任何其他字符串都可以正常工作。即使我更改“lto”和“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>

#usershapeforeding按钮是动态创建的。

使用您提供的JSFIDLE,我单击了
链接
,值发生了更改,如下所示。然后我点击save,一个
POST
。。。非
获取

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
无关。我们必须去别处看看

Symfony表示找不到GET路线时,返回的响应不太准确。实际上,有一个对不再存在的实体的方法的调用。我不知道Symfony是如何将其视为路由问题的,因为路由引用的控制器确实被调用了


这种奇怪的行为,我认为是由jquery引起的,实际上只是控制器的结果,控制器只在editShapeStatus中的值正确时(if-else)才执行上述不存在的方法。这就是为什么它能与其他任何东西一起工作。

即使表单有POST方法,如果您将jQuery AJAX设置为GET请求,GET也会执行。显示您的jQuery代码。$('editShapeStatus').val(“lto”);是我用来更改值的唯一jquery代码。表单由一个普通的表单提交,并向我们展示更多的代码,包括HTML和jQuery。如何提交此表单?我添加了表单和jquery代码来更改#editShapeStatusHTML的值,正如您的浏览器所看到的,它通常对人类和jquery/JS更有用……)很可能你还有其他因素会导致你描述的奇怪行为。。。一个jQuery行可能不是罪魁祸首。感谢您的检查。下面是当我在项目中发送请求并用firebug进行分析时发生的情况:这是一个“POST”请求。我甚至可以看到参数。一切看起来都很好。Symfony控制器返回以下答案:找不到“GET/user/map/border/save/”的路由:不允许使用的方法(Allow:POST)听起来好像您没有在routes.php中设置
POST
路由,但可能有
GET
路由,这使得您的
POST
s被重定向到
GET
s。。。您需要这样的路由:
route::post('/border/save',array('uses','controllername@methodname“)
这是我的路由配置:map_save_border:pattern:/save/defaults:{{{u controller:XXXBundle:border:saveBorder}方法:[POST]由于问题似乎与您的
MVC
环境有关,您可以改写您的问题或作为新问题,并明确说明您的发布路线未被您的环境识别。我刚开始与Laravel合作,虽然我很愿意帮忙,但可能帮不了什么忙。谢谢你的帮助。我发现了问题。。。看来我看错方向了。如果你刚开始拉威尔,这个问题有一天可能会对你有所帮助:)如果我有声望,我会给你投票:(很高兴你找到了一个解决方案:)这不是它找不到的
POST
路线吗?不,这条路线很好。只是控制器出故障了,我是巴迪。谢谢
$(document).on('click', '#useShapeForEditing', function() {
        $('#editShapeStatus').val("uls");
    });
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