【问题标题】:JQuery AJAX throws 404 for an existing urlJQuery AJAX 为现有 url 抛出 404
【发布时间】:2012-10-07 00:53:43
【问题描述】:

我正在使用 Jquery ajax 来调用 CodeIgniter 函数:

$.ajax({
  type: "POST",
  dataType:'json',
  beforeSend: function() {
  $("#opc").addClass("opacity");
  $("#searching").show(); 
  },
  url: "<?php echo base_url(); ?>search/get_results",
  data: {
    'ns_pos':ns_pos,
    'NSPlaceDomainID':activity,
    'DistrictID':area,
    'NSAssociationID':referer,
    'Title':text,
    'SettlementID':settlement,
    'NoOpinion':$("input[name=NoOpinion]").is(":checked"),
     'SpecialCharacteristics':ns_attr
  } 

等等……

在 Chrome 控制台中,我收到消息:

POST http://mattat.org.il/ci/index.php/search/get_results 404 (Not Found) 

响应预览是:

Not Found

The requested URL /ci/index.php/search/get_results was not found on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

但是,此功能确实存在,当我将链接粘贴到 URL 行时很明显。

我很困惑……

编辑:根据@paul 的建设性评论,我已将请求更改为 GET,并且确实找到了该页面。什么会导致这种晦涩的行为?

再一步:当我清空数据对象时(像这样:data: {}),即使使用 POST 请求也可以找到函数

【问题讨论】:

  • 您是否在跨域进行此调用?
  • 不,它是从内部调用的:mattat.org.il/ci/index.php/search/search_ns
  • 该页面为我返回 500 数据库错误...
  • 我知道,但这与我无关,因为函数应该传递参数。让我困惑的是,直接引用它可以找到它,而我通过AJAX调用它时却找不到
  • 可能是post vs get的问题。当您在浏览器中键入 URL 时,您正在发出获取请求。你的 Ajax 正在发出一个 post 请求。

标签: jquery ajax codeigniter http-status-code-404


【解决方案1】:

正如 Paul 已经指出的那样,由于 GET/POST 限制,这可能是一个错误。如果您支持此端点上的 POST 请求,请检查您的服务器代码。

【讨论】:

  • 确实如此。但是,我在同一页面上有很多其他 AJAX 请求,它们从同一个控制器调用不同的函数,并且工作完美。
【解决方案2】:

不要使用base_url(),请使用site_url()。我遇到过同样的问题。

下面给出一个简单的例子,其中查看了一个 ajax jQuery 发布。

 $.post("<?php echo site_url('message/add') ?>", {message: msg}, function() {
        $('#content').load("<?php echo site_url('message/view/ajax') ?>");
        $('#message').val('');
    });

Message/add 在这里你可以猜到这个函数是在控制器中定义的。当我第一次处理 php 时,我搜索了一个很好的例子。我不仅是 php 的新闻,也是 codeigniter 的新闻。在许多例子中,实现的形式就像“base_url+message/add”。 codeigniter 版本可能会导致此错误,因为它们都是由 2.X 之前的版本编写的。无论如何,如果你想要一个现成的代码,请检查以下链接,它对我有用!

jQuery ajax codeigniter example

【讨论】:

    【解决方案3】:

    同样的问题让我感到困惑。原来是Apache权限问题。我咨询了我的托管服务提供商,他们确认、修复了它并向我展示了如何设置一个每小时运行的 Cron 作业以重新声明适当的权限。他们还建议我使用 FileZila 而不是 WinSCP,并为我提供了在重新上传文件时自动重置权限的设置。

    【讨论】:

      猜你喜欢
      • 2019-12-25
      • 1970-01-01
      • 2018-01-16
      • 1970-01-01
      • 2012-05-17
      • 1970-01-01
      • 2021-02-15
      • 2018-09-19
      • 2017-07-18
      相关资源
      最近更新 更多