【问题标题】:AJAx script with a query-string in the url gives 404 not foundurl 中带有查询字符串的 AJAx 脚本给出 404 not found
【发布时间】:2015-04-10 17:06:45
【问题描述】:

我在这里非常缺乏经验,并且在我的网站上有一个预先制作的插件。我无法联系作者,因为他似乎不再支持它了。他仍然有一个所有工作的演示页面,我已经将我所拥有的与他所能做的最好的进行了比较,它似乎是一样的,所以问题一定出在我用来托管我的站点/数据库的 IIS 8.5 上。

这是我确定是罪魁祸首的代码:

"ajax": "inc/server_processing.php?type=getplayers",

server_processing 从不断变化的数据库中提取数据。您不能直接浏览此页面。此 ajax 脚本位于名为 player.php 的页面上,另一个页面 items.php 具有相同的 ajax 脚本,并且还返回 404 not found。

"ajax": "inc/server_processing.php?type=allitems",

当您转到这些选项卡中的任何一个时,都会出现 dataTables 警告:我知道数据库工作正常,因为如果您单击具有绝对路径而不是查询字符串的任何其他选项卡,它会显示收集的数据。

我觉得我没有很好地解释自己,对此我深表歉意,我在过去 2 天试图解决此问题时所学到的一切。这是我的页面,这是带有工作副本的作者页面。

My site; Authors working site

注意:目录结构是 wwwroot/stats/inc/ 在 stats 文件夹中是带有 ajax 脚本的 2 .php,在 inc 文件夹中是 server_processing.php,js 文件夹在 stats 文件夹中。

<script>
$(document).ready(function() {
    var players = $('#players').DataTable( {
        "processing": false,
        "serverSide": true,
        "ajax": "inc/server_processing.php?type=getplayers",
        "pagingType": "full",
        "columns": [
            { "data": "name" },
            { "data": "auth", "visible" : false },
            { "data": "kills" },
            { "data": "deaths" },
            { "data": "assists" },
            { "data": "kpd" },
            { "data": "kpm" },
            { "data": "playtime" },
            { "data": "disconnect_time" }
        ],
        "order": [[2, 'desc']]
    });
    $('#players tbody').on('click', 'tr', function () {
            window.location = "player.php?id="+players.cell(this, 1).data();
    });
});
</script>

【问题讨论】:

    标签: jquery ajax http-status-code-404 query-string


    【解决方案1】:

    您应该使用 HTTP 方法 GET 传递参数。

    $.ajax({
        url: 'inc/server_processing.php',
        data: {
            type: 'getplayers'
        },
        type: 'get',
        success: function(){
            // insert code here
        }
    });
    

    虽然在这些情况下我通常更喜欢使用 POST 而不是 GET,但这最终取决于您和您的应用程序的需求。

    【讨论】:

    • 我已经用作者在他自己的演示网站上使用的代码更新了原始帖子。我基本上只是按照说明复制 n 粘贴。除了包含上述 ajax 脚本的 2 个提到的 php 文件之外,一切都正常工作。
    • 由于作者设置的演示站点上的一切似乎都在正常工作,所以我冒昧地说这与我的设置有关。是否有原因 iis 无法从 /inc/server_processing.php 中的查询字符串中提取?
    • 一个问题可能与路径有关。您是否尝试过使用绝对路径而不是相对路径?
    • 这里是 server_processing.php 部分,如果您尝试直接访问它会重定向到 index.php?error if(empty($_SERVER['HTTP_X_REQUESTED_WITH']) || !strtolower($_SERVER[ 'HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { header("位置:../index.php?error=".urlencode("不允许直接访问。"));死(); }
    【解决方案2】:

    因此,对于我的这个数据表警告的特殊问题,解决方法是在 IIS 中编辑 web.config 文件。我的数据表上的一些 URL 非常大,超过了 IIS 中的默认最大值。这就是我将其更改为:

    <configuration>
      <system.webServer>
        <security>
            <requestFiltering>
                <requestLimits maxQueryString="3000" maxUrl="1000" />
                <fileExtensions>
                    <remove fileExtension=".java" />
                    <add fileExtension=".java" allowed="true" />
                </fileExtensions>
            </requestFiltering>
        </security>
    </system.webServer>
    

    您也可以通过在 IIS 中单击您的站点然后转到请求过滤来设置 maxQueryString 和 MaxUrl 来更改它。我希望如果其他人遇到这个问题或类似问题,它可以帮助他们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-20
      • 1970-01-01
      • 2022-08-16
      • 2011-04-17
      • 2015-06-25
      • 2021-12-18
      相关资源
      最近更新 更多