2014-01-19 40 views
1

我正在使用像Facebook一样工作的社交网站。帖子显示在主页上。他们可以被喜欢和评论。 如果有人发帖,LIKE TABLE会通过AJAX更新,并将其相似计数加1。 likes.php文件更新 LIKE TABLE并返回增加的值<span class = 'likeCount'>. $likeCount .</span>,并将其添加到类似按钮。.htaccess页面重定向对AJAX响应有影响

这工作正常home.php但不是在user.php这是用户配置文件页面。 user.php提取仅与特定用户相关的帖子。每当您尝试喜欢或评论user.php页面的帖子时,都会收到PHP错误 。当我alert(msg);它显示请求页面的整个HTML代码,user.php与PHP错误,一些变量未定义。 URL实际上就是这样的http://localhost/mysite/user.php?userID=yax,但它被重定向并被.htaccess重写为http://localhost/mysite/user/yax。我想这是导致问题的原因,因为相同的AJAX在home.php中工作正常。

AJAX代码:

$(".mlike").click(function() { 
    $(".murconform").submit(function(e){ 
     return false; 
    }); 
    var $this=$(this); 
    var post_id = $(this).val(); 
    var user_id = $(".user_id").text(); 
    alert('Post: '+post_id +' User: '+user_id); 
    var request = $.ajax({ 
     url: "likes.php", 
     type: "POST", 
     data: { post : post_id , user : user_id }, 
     dataType: "html" 
    }); 
    request.done(function(msg) {  
     $this.prev('.likecount').html(msg); 
    }); 
}); 

的.htaccess代码:

RewriteEngine on 
RewriteBase /mysite/user/ 

RewriteCond %{THE_REQUEST} /user\.php\?user=([^\s&]+) [NC] 
RewriteRule^%1? [R=302,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ user.php?user=$1 [L] 

这有很沮丧和停止我的工作在过去的三天。任何帮助将被适当赞赏。谢谢。

+0

在用户页面上为您的ajax请求提供的firebug> network的任何屏幕截图? –

+0

一般提示:如果您收到错误消息,请告诉我们它们是什么,然后显示代码。 –

+0

@MarcB:AJAX返回请求页面的HTML。 – Yax

回答

1

由于您的AJAX调用正在POST请求,您可以添加一个规则来跳过POST请求来回改写:

RewriteEngine on 
RewriteBase /mysite/ 

RewriteCond %{REQUEST_METHOD} POST 
RewriteRule^- [L] 

RewriteCond %{THE_REQUEST} /user\.php\?user=([^\s&]+) [NC] 
RewriteRule^%1? [R=302,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+)$ user.php?user=$1 [L,QSA] 
+0

但是,它正在请求likes.php,所以重写规则不能被override为likes.php。只有user.php的规则 –

+0

真正的规则只影响'/user.php?user = something' – anubhava

+0

刚刚添加规则,但AJAX不起作用。它只显示第一个“警报”,仅此而已。我有一个alert(msg);'这是显示返回的** HTML **的一个,但它不再显示。 – Yax

1

好了,试试这个:

在你的.htaccess添加此规则:

RewriteRule ^post_to_likes$ path/to/likes.php 

现在在你的Javascript代码使用此:

$.post('hxxp://your.url/post_to_likes',data,callback,'html'); 
+0

你能解释一下这是如何工作的吗? – Yax

+0

“重写规则模式目标”。你的问题是如何告诉浏览器在哪里以及如何找到你的脚本文件。试试这个代码,它是安全的。 – phpCore

+0

它不工作,我的猜测是正确的。 – Yax