我有一个laravel 4应用程序,只需使用laravel进行常规保存即可正常工作。 “常规保存”意味着我没有使用ajax调用URL来保存表单中的数据,而是使用laravel的路由到URL / revocable / users / page / 1 / update。
在仅对网址的ajax调用期间,我收到了403禁用错误: /撤销/用户/页面/ 1 /更新
这里失败了:
$.ajax({
type: action,
cache: false,
dataType: 'json',
url: '/revocable/users/page/1/update',
data: {
'oSerializeArray': [array]
},
beforeSend: function() {
}
})
.done( function( data, text, jqxhr ) {
data.success;
//data.iPersonsPK;
window.location.replace(sUrlEdit);
})
.fail( function ( data, jqxhr ) {
data.success;
})
.always( function ( data ) {
data.success;
})
return false;
我认为这是我的apache httpd.conf的虚拟主机设置。当我收到403错误时,我没有虚拟主机文件。
我尝试使用以下方法创建虚拟主机文件:
<Directory "/home/myultrat/public_html/secure/test/*">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog /usr/local/apache/domlogs/secure.myultratrust.com.errors
但问题是一样的。我读到它可能是一个跨站点脚本错误。但它在同一个域上。所有这些代码都可以在我的本地机器上使用WAMP。所以我认为这是一个vhost配置问题。
哦,我必须提一下,laravel应用程序位于子目录中,而不是以“传统”方式放置在子域的根目录中。
如何解决此问题?
非常感谢和祝福&lt;&gt;&lt ;, 维克多
已更新
这么简单的修复。我需要更新相对URL。
将提交到$ .ajax的网址从'/revocable/users/page/1/update'
更改为'/test/revocable/users/page/1/update'
修复了此问题。 @prabhakaran8737在URL路径不正确时部分正确。但是(正如我在他的回答的评论中所提到的),这一次,我认为URL与发出请求的位置相关(即'/test/revocable/users/page/1/update'
),但$ .ajax将URL调用视为基于它的根目录域。所以我需要修改基于根的URL并相应地更改它(即'/test/revocable/users/page/1/update'
)。
我也试过使用绝对网址,但似乎也没有用。所以来自根的相对URL就是答案。并且相对URL必须具有开头/
正斜杠。我尝试了./
,我尝试了没有正斜杠,但那些没有用。
答案 0 :(得分:0)
[EDITED] 只是一个注释,我以为我在Prabhakaran的回应之前发布了这个。但是,我认为对于某人或我自己来说,这仍然可以进一步明确解决这个问题。我祈祷这很快得到解决。 :)
这不是一个答案,但可能有助于导致一个。 :)
我达到了一定的理解点。单击“保存”按钮时,表单将数据保存在POST请求中。这个POST URL是 http://secure.myultratrust.com/test/revocable/users/page/3/update
Laravel路线可以工作并保存数据。
然而,当我通过“保存继续”按钮保存数据时,该按钮执行$.ajax
调用但仍然在同一个POST URL Apache突然抱怨找不到404 error
页面
相同的文件和Laravel应用程序适用于我使用2.4的WAMP。
我在我的WAMP本地服务器中有这个:
<VirtualHost *:80>
ServerName l4-confide
ServerAlias l4-confide
DocumentRoot "C:\wamp\www\test\trunk\php\l4-confide\public"
SetEnv APPLICATION_ENV "development"
<Directory "C:\wamp\www\test\trunk\php\l4-confide\public">
DirectoryIndex index.php
Options All Includes Indexes
Options Indexes FollowSymLinks MultiViews
Require all granted
</Directory>
</VirtualHost>
但我的生产服务器使用的是Apache 2.2。什么相当于“需要所有授予”?我不确定这是否能解决问题。我想知道为什么Apache抱怨只在$.ajax
电话中找不到404错误,而不是在以“常规”方式提交(即保存)表格时(即通过HTML发布)。
答案 1 :(得分:0)
我想问题出在网址:&#39; / revocable / users / page / 1 / update&#39;,
假设您在页面http://localhost/something/中
并使用相关网址revocable/users/page/1/update
,然后ajax请求可能是http://localhost/something/revocable/users/page/1/update,如果您在页面http://localhost/another/中,那么请求将是
http://localhost/another/revocable/users/page/1/update
所以你不会在那里找到正确的页面来处理请求。
答案 2 :(得分:0)
var csrf = $('meta[name=_token]').attr('content');
$.ajaxSetup({
beforeSend: function(request) {
return request.setRequestHeader('X-CSRF-Token', csrf);
}
});
将var csrf设置为csrf变量。我的网站将其全局存储在元
中答案 3 :(得分:-1)
Apache 2.2中的“需要所有授权”等效于:
订单允许,拒绝 允许所有
检查Apache升级: http://httpd.apache.org/docs/2.4/upgrading.html
此外,.htaccess(2.2 vs 2.4)存在一些差异,但我不确定问题是否与之相关。