输入按钮/锚链接通过GET提交表单,其中指定了POST。
输入按钮/锚链接通过GET提交表单,其中指定了POST。
我正在将一个过程化的PHP应用程序转换为一个RESTful的Laravel/jQuery应用程序。我做了一些详尽的研究,但所有的建议都失败了,下面包括了所有的建议。
在旧版本中,创建一个新记录是通过在页面URL上添加?Add作为GET变量来完成的:
添加新的 更多菜单项
根据Laravel的标准,我尝试将请求POST到页面,所以我修改了菜单如下:
更多菜单项
jQuery:
$('#Add').on('click',function(e) { e.preventDefault; if(confirm('一些文本')) $('#AddNew').submit(); return false; }); $('#AddNew').append(CSRF); $('#AddNew').attr('action','./'); $('#AddNew').attr('method','post');
有人可以帮我弄清楚为什么这个表单拒绝POST请求吗?确认消息出现后,页面导航到正确的页面,但应用程序却向其发出了GET请求?
我注意到CSRF令牌输入没有显示在URL中,正如我对GET请求所期望的那样。
编辑
根据要求,这个页面的相关路由如下:
// Route::get('/SubDirectory/ThisPage/','ThisController@index'); 通常转发到第一个页面,但为了测试这个而注释掉了 Route::get('/SubDirectory/ThisPage/{PageNr}', 'ThisController@edit'); Route::post('/SubDirectory/ThisPage/', 'ThisController@add'); Route::delete('/SubDirectory/ThisPage/{ID}', 'ThisController@destroy'); Route::patch('/SubDirectory/ThisPage/{ID}', 'ThisController@update');
最近我发现,当使用"./"作为表单的action属性时,提交按钮或锚链接无法正确提交表单。但是,当我将action属性更改为完整的URL "/SubDirectory/ThisPage"时,问题得到了解决。
问题的原因是,使用"./"作为action属性时,浏览器会将相对路径解析为当前页面的相对路径。因此,当表单提交时,浏览器尝试将表单数据提交到当前页面的相对路径,而不是我们预期的目标页面。
解决方法是将action属性修改为完整的URL。通过使用完整的URL,我们明确指定了表单数据应该提交到的目标页面。在这种情况下,我们将action属性更改为"/SubDirectory/ThisPage",其中"/SubDirectory/ThisPage"是我们要提交到的目标页面的完整URL。
这样,当我们点击提交按钮或锚链接时,表单数据将被正确地提交到目标页面,而不会出现问题。
问题的原因是缺少CSRF令牌,解决方法是在表单中添加CSRF令牌,并将表单的方法设置为POST。
原因:
根据给出的代码,可以看出问题出现在没有添加CSRF令牌。CSRF(Cross-Site Request Forgery)令牌是一种安全机制,用于防止恶意网站利用用户的身份在其他网站上执行恶意操作。
解决方法:
要解决这个问题,需要在表单中添加CSRF令牌,并将表单的方法设置为POST。在给出的代码中,可以看到在文档加载完成后,通过jQuery将CSRF令牌添加到隐藏的input标签中,并将表单的方法设置为POST。这样就可以通过POST方法提交表单,同时带有CSRF令牌,以确保安全性。
以下是解决问题的代码:
Title
以上代码将会添加CSRF令牌,并将表单的方法设置为POST,以解决提交时出现的问题。
请注意,CSRF令牌的值应该由后端生成,并在页面的meta标签中进行设置。在这个例子中,CSRF令牌的值为"73ijdnnxyis7o3jr"。在实际应用中,应该根据具体情况生成并设置CSRF令牌的值。
希望以上解决方法对您有帮助!
问题的原因是作者想要使用一个链接来提交表单,而不是使用提交按钮或输入框。作者尝试使用一个带有onclick属性的链接,并在onclick处理程序中使用了form.submit()来提交表单。然而,这种方法只适用于支持JavaScript的用户。此外,作者还提到,如果将链接转换为按钮或输入框,样式会受到影响。
解决方法是使用一个带有onclick属性的链接,并在onclick处理程序中使用form.submit()来提交表单。但是需要注意的是,这种方法只适用于支持JavaScript的用户。如果要支持不支持JavaScript的用户,可以考虑使用一个简单的来提交表单。如果将链接转换为按钮或输入框,可以使用CSS来自定义样式,以达到与链接相同的效果。
以下是完整的文章:
HTML表单通常使用提交类型的输入或按钮来提交。不应该使用链接来提交表单,但是如果你非常希望使用链接来提交表单,你可以使用一个带有onclick属性的链接,并在onclick处理程序中使用form.submit()来提交表单。需要注意的是,如果使用这种方法,它将不适用于不支持JavaScript的用户。
为什么不只是一个简单的呢?如果日后需要进行一些异步请求或其他操作,那么给输入框一个id会更方便...
因为我想要重用现有的菜单格式。如果我将锚点标签转换为按钮/输入框,样式就不会有相同的效果。
你可以按照自己的需求来自定义输入框的样式。
我刚刚将锚点转换为提交输入框,但页面仍然发送了GET请求。