AJAx 在 url 中带有查询字符串的脚本给出 404 not found
AJAx script with a query-string in the url gives 404 not found
我在这里非常缺乏经验,我的网站上有一个预制的插件。我无法联系作者,因为他似乎不再支持它了。他仍然有一个所有工作的演示页面,我已经尽我所能将我拥有的与他的最好的进行了比较,看起来是一样的,所以问题一定出在我用来托管我的 site/database 的 IIS 8.5 上。
这是我确定是罪魁祸首的代码:
"ajax": "inc/server_processing.php?type=getplayers",
server_processing 从不断变化的数据库中提取数据。您不能直接浏览该页面。此 ajax 脚本位于名为 players.php 的页面上,另一个页面 items.php 具有相同的 ajax 脚本,并且 returns 未找到 404。
"ajax": "inc/server_processing.php?type=allitems",
当您转到这些选项卡中的任何一个时,会出现 dataTables 警告:我知道数据库工作正常,因为如果您单击任何其他具有绝对路径而不是查询字符串的选项卡,它会显示收集的数据。
我觉得我没有很好地解释自己,对此我深表歉意,我所知道的一切都是我在过去两天试图解决这个问题时学到的。这是我的页面,这是带有工作副本的作者页面。
注意:目录结构是 wwwroot/stats/inc/ 在 stats 文件夹中是 2.php 和 ajax 脚本,在 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>
您应该使用 HTTP 方法 GET 传递参数。
$.ajax({
url: 'inc/server_processing.php',
data: {
type: 'getplayers'
},
type: 'get',
success: function(){
// insert code here
}
});
虽然在这些情况下我通常更喜欢使用 POST 而不是 GET,但这最终取决于您和您的应用程序需求。
因此,对于我关于此数据表警告的特定问题,解决方法是在 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 来更改它。我希望如果其他人遇到这个问题或类似问题,它会对他们有所帮助。
我在这里非常缺乏经验,我的网站上有一个预制的插件。我无法联系作者,因为他似乎不再支持它了。他仍然有一个所有工作的演示页面,我已经尽我所能将我拥有的与他的最好的进行了比较,看起来是一样的,所以问题一定出在我用来托管我的 site/database 的 IIS 8.5 上。
这是我确定是罪魁祸首的代码:
"ajax": "inc/server_processing.php?type=getplayers",
server_processing 从不断变化的数据库中提取数据。您不能直接浏览该页面。此 ajax 脚本位于名为 players.php 的页面上,另一个页面 items.php 具有相同的 ajax 脚本,并且 returns 未找到 404。
"ajax": "inc/server_processing.php?type=allitems",
当您转到这些选项卡中的任何一个时,会出现 dataTables 警告:我知道数据库工作正常,因为如果您单击任何其他具有绝对路径而不是查询字符串的选项卡,它会显示收集的数据。
我觉得我没有很好地解释自己,对此我深表歉意,我所知道的一切都是我在过去两天试图解决这个问题时学到的。这是我的页面,这是带有工作副本的作者页面。
注意:目录结构是 wwwroot/stats/inc/ 在 stats 文件夹中是 2.php 和 ajax 脚本,在 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>
您应该使用 HTTP 方法 GET 传递参数。
$.ajax({
url: 'inc/server_processing.php',
data: {
type: 'getplayers'
},
type: 'get',
success: function(){
// insert code here
}
});
虽然在这些情况下我通常更喜欢使用 POST 而不是 GET,但这最终取决于您和您的应用程序需求。
因此,对于我关于此数据表警告的特定问题,解决方法是在 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 来更改它。我希望如果其他人遇到这个问题或类似问题,它会对他们有所帮助。