2014-01-19 73 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