【问题标题】:404 Error but correct Response from JQuery Ajax in Codeigniter FrameworkCodeigniter 框架中来自 JQuery Ajax 的 404 错误但正确响应
【发布时间】:2011-03-22 06:51:52
【问题描述】:

这类似于 SO 上的另一个问题:

jQuery Ajax returning 404 Error, but correct Response

但上面的内容是非常特定于 wordpress 的。此外,我的直觉是,我的问题更多与我的 Apacher 服务器设置有关,但我在这方面有点新手。

这是交易...我有这个 Jquery AJAX 代码:

events: function(start, end, callback) {
$.ajax({
    type: "POST",
    // This Works -->
    url: 'http://calendar.localhost/index.php/myfeed/',
    // This Fails -->
    //url: 'http://calendar.localhost/myfeed/',
    dataType: 'json',
    cache: false,
    data: {
        appointment_id: _appointmentId
    },
    success: function(d) {.... },
    error: function(x,s,e) {...  }
});

当我将 url 与 index.php 一起使用时,一切正常。然而,当我使用没有 index.php 的那个时,我得到一个 404 错误,即使 (json) 数据似乎恢复正常(见下文)。

此外,这发生在我最近升级到的新系统上: Debian 2.6.32 (amd64) PHP 5.3.3 阿帕奇 2.2.16

相同的代码(即 /myfeed 或没有 index.php)适用于我的旧系统: Fedora 8(是的,8 大声笑) PHP 5.2.x 阿帕奇 2.2.6

(请注意,最初我使用 '/myfeed' 作为在我的“旧”系统上找到的 url 参数。我不需要对域进行硬编码的任何解决方案都是我可以接受的。)

所以要么我在这 3 个中的一个中遇到了一些差异(即 php、apache 或 linux 版本的变化),要么我需要在我的新 Apache 设置中修改一些东西(我的猜测是root dir '/' 用于虚拟主机,我在本地主机上用于此站点...也许它认为响应来自不同的域,但我不明白如果它与 index.js 一起使用会怎样。 php 但没有它会失败???)。

如果有人有解决方案或想法让我尝试,那将非常感激!!!!

以下是 Firebug 针对非工作案例的详细信息:

POST http://calendar.localhost/myfeed 404 未找到

Headers tab:
Response Headersview source
Date    Tue, 22 Mar 2011 06:22:37 GMT
Server  Apache/2.2.16 (Debian)
X-Powered-By    PHP/5.3.3-7+squeeze1
Vary    Accept-Encoding
Content-Encoding    gzip
Content-Length  220
Keep-Alive  timeout=15, max=90
Connection  Keep-Alive
Content-Type    text/html
Request Headersview source
Host    calendar.localhost
User-Agent  Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.16) Gecko/20110302 Iceweasel/3.5.16 (like Firefox/3.5.16)
Accept  application/json, text/javascript, */*; q=0.01
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive  300
Connection  keep-alive
Content-Type    application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With    XMLHttpRequest
Referer http://calendar.localhost/index.php/client
Content-Length  36

Response tab:
{"eventArray":[{"id":"2","notes":"test client Thurs","start":1299951000000,"end":1299960900000},{"id":"3","notes":"test bb334343","start":1300064400000,"end":1300068000000},{"id":"5","notes":"New appt dafdaf","start":1300462200000,"end":1300465800000},     {"id":"35","notes":"japan2","start":1300539600000,"end":1300545000000},{"id":"47","notes":"helo customer test","start":1300471200000,"end":1300475700000},{"id":"50","notes":"test 2 x email","start":1300455000000,"end":1300455900000}]}

还有:

~ mod_rewrite 已启用?是的,我相信(我的 CI 页面应该会重定向)。

~ .htaccess 在 CI www 目录中?是的:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

#Checks to see if the user is attempting to access a valid file,
#such as an image or css document, if this isn't true it sends the
#request to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
# If we don't have mod_rewrite installed, all 404's
# can be sent to index.php, and everything works as normal.
# Submitted by: ElliotHaughin

ErrorDocument 404 /index.php
</IfModule>

谢谢,

彼得

PHP 端代码(根据请求):

public function viewEvent()
{
   ...
   $appointmentData['startDate'] = $startDate;
   $appointmentData['startTime'] = $startTime;

   $data = array( 'eventData'=>$appointmentData );

   echo json_encode($data);
}

另外,Apache 日志给出:

[Tue Mar 22 10:45:03 2011] [error] [client 127.0.0.1] File does not exist: /var/www/calendar/myfeed, referer: http://calendar.localhost/

【问题讨论】:

  • 能贴一下返回JS对象的CI代码吗?
  • 在帖子末尾添加了 CI 代码

标签: php ajax codeigniter apache2


【解决方案1】:

已解决:令人尴尬的是,未启用 ModRewrite。我只是通过将垃圾文本放入等效于“if/else”语句的方式来解决这个问题,该语句以启用或不启用 modrewrite 为条件,果然不是。我会更早发现这一点,除非该站点表现出其他让我认为 modrewrite 实际上已启用的行为。呃。

我希望我的白痴可以帮助某人在未来节省一些时间! :)

【讨论】:

  • 同样的事情发生在我身上。感谢您的帖子。
  • 跟我一样。在 Debian 中,Apache2 的默认安装附带了 mod_rewrite 安装,但未加载。这篇文章帮助了我:xmodulo.com/2013/01/…
【解决方案2】:

这可能行不通,但值得一试。在htaccess文件中,尝试把rewrite rule中的问号去掉,这样就变成了

RewriteRule ^(.*)$ index.php/$1 [L]

我有一个问题,我编写的应用程序在我的本地机器上运行良好,但在服务器上无论如何都继续显示默认控制器,并且删除问号修复了它。

【讨论】:

    【解决方案3】:

    您可以在这里获得完美的解决方案!问题是最近对 codeigniter 的更新。我希望这可以节省一两天的时间!快乐编码! https://gist.github.com/philipptempel/4226750

    【讨论】:

    • 请考虑通过您发布的链接中的信息摘要来增强您的答案。如果链接后来被删除或过期,您的回答将完全无效。
    猜你喜欢
    • 2011-03-27
    • 2012-02-25
    • 2013-01-29
    • 1970-01-01
    • 2017-05-06
    • 2020-08-04
    • 2016-10-10
    • 2017-08-07
    • 1970-01-01
    相关资源
    最近更新 更多