douteng5673 2011-03-22 06:51
浏览 58
已采纳

404错误但正确的Codeigniter框架中来自JQuery Ajax的响应

This is similar to another issue on SO:

jQuery Ajax returning 404 Error, but correct Response

but the above is very wordpress-specific. Also, my gut feeling is that my problem has more to do with my Apacher server setup, but I'm somewhat of a newbie at that.

Here's the deal...I have this Jquery AJAX code:

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) {...  }
});

When I use the url with index.php, everything works fine. However when I use the one without index.php, I get a 404 error, even though the (json) data seeems to be coming back ok (see below).

Also, this is happening on a new system I recently upgraded to : Debian 2.6.32 (amd64) PHP 5.3.3 Apache 2.2.16

The same code (ie /myfeed or without index.php) works on my old system: Fedora 8 (yes, 8 lol) PHP 5.2.x Apache 2.2.6

(Note, initially I was using '/myfeed' for the url param which worked find on my "old" system. Any solution where I don't have to hardcode the domains would be acceptable to me.)

So either I'm hitting some difference in one of these 3 (ie, the change in php, apache, or linux versions), or there's something I need to modify in my new Apache setup (my guess is something with the root dir '/' for virtual hosts, which I'm using for this site on my localhost...perhaps it's thinking the response is from a different domain, but I don't see how that could be if it works with index.php but fails without it???).

If anyone has a solution or ideas for me to try that would be greatly appreciated!!!!

Here are details from Firebug for the non-working case:

POST http://calendar.localhost/myfeed 404 Not Found

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}]}

Also :

~ mod_rewrite enabled? Yes, I belive so (my CI pages redirect as they should).

~ .htaccess in CI www directory? Yes:

<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>

Thanks,

Peter

PHP-side code (by request):

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

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

   echo json_encode($data);
}

Also, Apache log is giving:

[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/
  • 写回答

3条回答 默认 最新

  • dongye9182 2011-04-05 19:21
    关注

    Resolved: embarrassingly, ModRewrite was not enabled. I only figured this out by putting garbage text inside the equivalent of an "if/else" statement conditioned on modrewrite being enabled or not, and sure enough it wasn't. I would have found this earlier except the site was exhibiting other behavior that made me think modrewrite was actually enabled. ugh.

    I hope my idiocy helps someone save some time in the future!! :)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?