在同一域上使用 jquery ajax 调用进行 post 调用时出现错误 403 Forbidden

问题描述 投票:0回答:3

我有一个网页(mainmenu.php),其中有一个javascript函数作为网页中的脚本。 Java脚本函数名称是:

statusHistoryUpdate(status)

此函数对与我的网页位于同一域的 php 文件执行 ajax post 调用。这是功能代码:

                    function statusHistoryUpdate(status)
                    {


                           var data = {
                                reg_no: selectedRegNo,
                                status: status,
                                progress_id : selectedProgress
                            };
                            data = $(this).serialize() + "&" + $.param(data);
                          //alert(data);
                          $.ajax({
                          type: "POST",
                          dataType: "json",
                          url: "../db/statusHistory.php", //Relative or absolute path to response.php file
                          data: data,
                          beforeSend: function(){

                            $('#loading').toggle();
                            //$("#submitbutton").html( "<button id='buttonsubmit' class='btn btn-primary btn-lg btn-block' type='submit' value='Register' disabled> <span class='spinner-border spinner-border-md'></span>Loading..</button>");
                          },
                          success: function(data) {

                              getData();
                          },
                          complete: function(){
                            //$('.ajax-loader').css("visibility", "hidden");
                            $('#loading').toggle();

                          },
                           error: function(xhr, status, error) {
                            alert(xhr.responseText);
                          }
                        });
                    }

您会看到我发布的网址是

url: "../db/statusHistory.php"

使用 mainmenu.php 中的按钮调用此函数。

<button id="'.$progress_id.'" type="button" class="btn btn-primary btn-sm btn-block" onclick="updateStatus('.$progress_id.',\''.$status.'\',\''.$reg_num.'\')">Update Status</button>

所有这些工作直到这个周末发生了变化,现在当执行此帖子调用时,它给我一个错误403 Forbidden,你没有访问/db/statusHistory.php的权限

这是错误中的警报:ajax 调用中的部分:

我不知道是什么原因造成的,我检查了权限,我创建了一个新的 php 文件来发布,但它仍然给我同样的错误。

我托管在共享托管服务器上,使用 php、jquery/3.4.0。 我只能访问共享主机面板“CPanel”,不能访问 Linux 服务器。

这是我的托管目录和权限的屏幕截图。我的 mainmenu.php 位于目录 phplogin 中,mainmenu.phpstatusHistory.php 进行后调用,它位于目录 db

公共 html 目录:

phplogin目录:

数据库目录:

我应该采取哪些不同的措施来完成电话后的工作?正如我所说,它确实工作了大约一个月,然后就停止了......

如有任何帮助,我们将不胜感激。

更多chrome开发者工具截图:

网络选项卡:

php jquery html ajax cpanel
3个回答
1
投票

问题是

mod_security
。我为我的域禁用了
mod_security
,我的问题得到了解决。我将联系我的托管公司并要求他们正确进行设置。

不知道为什么它刚刚开始发生。


0
投票

如果它之前工作正常,您应该检查您的

.htaccess
文件,该文件位于您网站的根目录中。


0
投票

如果您的客户端/用户安装了 Google 翻译扩展,并且您正在发送(通过 ajax)用户输入的数据(特别是来自 TinyMCE 或等),则 Google 翻译扩展可能已将这两行附加到末尾您的用户输入的数据:

<p>&nbsp;</p>
<div id="gtx-trans" style="position: absolute; left: -28px; top: -8px;">&nbsp;</div>

当我从发送到(PHP)后端的 TinyMCE 数据中删除这些行后,问题就解决了。

也许这个发现会帮助其他人。

更新:

看来通过 jQuery AJAX 发送的字符串

&nbsp;
是有问题的。即使删除了谷歌翻译附加文本后,我仍然遇到了更多麻烦。

事实证明,从有效负载中删除字符串

&nbsp;

(例如
.replaceAll("<p>&nbsp;</p>", "<p> </p>")

解决了这个问题。也许 that 就是导致 Google 翻译保险杠贴纸未能满足 XHR 请求的首要原因。没有意义,但它对我有用,所以分享。

© www.soinside.com 2019 - 2024. All rights reserved.