1

这是一个非常基本的问题,不应该像原来那么难。

我有一个我开发的 CMS。我正在使用 ajax 来更改表单参数。当用户选择没有“特殊参数”的选项时,我不想显示任何内容。现在,我有 ajax 搜索文件。如果文件存在,它应该在 div 中显示它。如果它不存在,我不想显示任何内容。截至目前,当文件不存在时,div 会加载整个页面并出现 404 错误。我不想显示错误,当文件不存在时我什么都不想要。

这就是我所拥有的:

$.ajax({

url: '../components/com_'+PARAMS+'/menu.php',
success: function(result){
     $('#menuparams').html(result);
},
error: function(){
    $('#menuparams').html('');
}
});
4

2 回答 2

0

听起来您的路径被路由到无法发送 HTTP 响应标头的 CMS。要么您忘记在 CMS 的响应标头中发送 404,要么您在尝试发送标头之前向页面发送了文本。

如果是这种情况,您可以修复您的 CMS。或者您可以检查 404 错误的成功结果。

更新

在您的 CMS 中,当没有找到某些内容时,在发送其他任何内容之前,您必须执行以下操作:

<?php
header("HTTP/1.0 404 Not Found");
?>

在调用标头之前,根本不需要任何字符,包括发送到 Web 服务器的空格。如果不了解您的 CMS 的内部结构,我无法为您提供更多帮助。

既然你说你什么都得不到,那我就问问。在浏览器中打开 URL 会得到什么?您还可以发布您将使用什么 URL 在浏览器中打开它以及 PARAMS 的内容。

告诉我们什么 console.log('../components/com_'+PARAMS+'/menu.php'); 做。如果你把它放在 $.ajax({

于 2013-08-10T17:39:03.683 回答
0

您的 jQuery 代码对我来说是正确的,问题似乎是您的 CMS 返回的内容。由于您说 div 加载了 404 错误的整个页面,因此 CMS 似乎实际上并没有在响应中设置 404 状态,它只是返回一个 404 错误页面。在这种情况下,jQuery 不会知道这是一个错误,而是会执行成功函数。

如果您可以让 CMS 设置 404 状态,那么您的 jQuery 代码将按预期工作。如果不能,您可以将代码更改为以下内容:

$.ajax({
  url: '../components/com_'+PARAMS+'/menu.php',
  success: function(data) {
     if ($(data).find(... something only the 404 error page has ...).length) {
       $('#menuparams').html('');
     } else {
       $('#menuparams').html(data);
     }
  }
});
于 2013-08-10T17:44:04.720 回答