【问题标题】:JQuery's $.post sometimes work sometimes return 403 forbidden errorJQuery 的 $.post 有时工作有时会返回 403 禁止错误
【发布时间】:2012-07-29 19:40:56
【问题描述】:

有时我会收到 403 禁止错误,我看不出有什么问题。
这是我的 jQuery 代码:

    $.ajax({
        type: 'POST',
        url: './ajax-conf-editc.php',
        data: { conf_id: Id, conf_contenido: data },
        async: false,
        success: function(msg){
            if ( msg == '1' || msg == 1){
                var confname = $('#nameConf').val();
                $.cookie('SUCCESS', 'Se ha guardado el contenido de la configuración "' + confname + '".', { expires : 1, path : '/' });
                $(window.location).attr('href', 'index.php');
            } else {
                $('#conf-editc-form').removeAlertBoxes();
                $('#conf-editc-form').alertBox(msg, {type: 'error'});
            }
        }
    });

使用此数据可以正常工作:

conf_id=11&conf_contenido=%2523tabs-0%253CtabContent%253E%253Cp%253EContenido%253C%2Fp%253E%253CtabTitle

但是当我发送这个时,失败并返回一个 403 Forbidden

conf_id=11&conf_contenido=%2523tabs-0%253CtabContent%253E%253Cp%253E%253Ca%2520onclick%253D%2522javascript%253A%2524%2528%2520%2527%2523tabs%2527%2520%2529.tabs%2528% 257Bselected%253A1%257D%2529%253Bscroll%25280%252C0%2529%2522%2520href%253D%2522javascript%253Avoid%25280%2529%253B%2522%253EContenido%253C%2Fa%253E%253C%253E%253C%Ftitle 253EInicio%253Ctabs%253E%2523tabs-1%253CtabContent%253E%253Cp%253EContenido%25201%253C%2Fp%253E%253CtabTitle%253Edos

我希望有人可以帮助我并告诉我为什么会这样?

这是我失败时收到的消息:

禁止

您无权访问此服务器上的 /kidspc2/configuraciones/ajax-conf-editc.php。

此外,在尝试使用 ErrorDocument 处理请求时遇到 404 Not Found 错误。

编辑:mod_security 可以这样做吗?怎么查不出来?

编辑:我解决了这个问题,在 Base64 中编码 conf_content 值。

【问题讨论】:

  • 服务器 error_log 中是否有任何条目显示 403 的原因?
  • 你想在 conf_contenido 中发送什么?
  • 您是否尝试过查看 Chrome 或 Firebug 网络面板以确切了解请求是什么、向其发布了哪些数据以及返回的响应/标记对于那些有效的响应/标记是什么?
  • 查看此链接stackoverflow.com/a/9691395/138071 您可能对要接收的数据长度有限制
  • 这可能与 jQuery 无关,而与 PHP 脚本所做的一切有关。

标签: php jquery ajax post


【解决方案1】:

尝试去掉网址中的点和斜线

把这个./ajax-conf-editc.php改成这个ajax-conf-editc.php,然后告诉我你得到了什么。

【讨论】:

  • 你确定'./ajax-conf-editc.php'和'ajax-conf-editc.php'有什么区别吗?
  • 是 - ./ 转到应用程序根目录,因此它期望页面位于应用程序根目录中,没有 ./ 与当前页面处于同一级别。
  • 事实上,现在我想起来了。/可能会让你更上一层楼。无论哪种方式都是不同的结果。
  • 不,我刚刚意识到对于第一种情况已经有效。所以它不会修复你的脚本,但我之前从未见过 ./
  • ./ 是当前目录,没有任何变化。 ./ != ../
【解决方案2】:

我猜您的 $.ajax 在很短的时间内被多次请求,这就是您收到此 404 错误的原因。 您可以通过取消所有以前的 ajax 调用并为最新的 ajax 调用请求进行新的 ajax 调用来修复它。希望这可以帮助。

如下代码:

    if( this.ajax ){
            this.ajax.abort();
        }
        this.ajax=$.ajax({
        type: 'POST',
        url: './ajax-conf-editc.php',
        data: { conf_id: Id, conf_contenido: data },
        async: false,
        success: function(msg){
        if ( msg == '1' || msg == 1){
            var confname = $('#nameConf').val();
            $.cookie('SUCCESS', 'Se ha guardado el contenido de la configuración "' + confname +        '".', { expires : 1, path : '/' });
            $(window.location).attr('href', 'index.php');
        } else {
            $('#conf-editc-form').removeAlertBoxes();
            $('#conf-editc-form').alertBox(msg, {type: 'error'});
        }
    }
});    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 2019-02-28
    • 2013-05-17
    • 2015-07-31
    • 1970-01-01
    • 2020-05-25
    • 2022-11-25
    相关资源
    最近更新 更多