ajax请求和htaccess

时间:2015-05-27 13:19:22

标签: javascript php jquery ajax .htaccess

我正在构建一个小规模的自定义cms来处理不同的目标网页。

我正在为root用户和管理面板使用.htaccess文件,但我在ajax请求中遇到了问题。

对于字体结尾,网址看起来像合作伙伴/页面标题/国家/地区 我使用以下htaccess

将所有请求重定向到索引
Options +FollowSymLinks
RewriteEngine On
#RewriteCond %{REQUEST_URI} !^/cms-admin
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{QUERY_STRING} !^skip=1$

RewriteRule ^(.*)/(.*)/(.*)$ index.php?partner=$1&page=$2&country=$3 [QSA,NC,L]
RewriteRule ^ajax.php$ /marketing/cms-admin/ajax.php [QSA]


ErrorDocument 404 /includes/error.php
ErrorDocument 404 "<H1>oops..  Page not found</H1><p> If you have reached this page from an external url please visit unicaf's <a href='https://unicaf.org'> main website</a> <br> and try navigating to this page from there"


# compress text, html, javascript, css, xml:
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript

对于admin文件夹,我使用以下方法重定向所有请求:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

#RewriteRule ^(.*)$ index.php?page=$1&option=$2&action=$3 [L]
#RewriteRule ^(.*)/*(.*)/*(.*)/*(.*)/*$ index.php?a=$1&b=$2&c=$3&d=$4
#RewriteRule ^(.*)/*(.*)/*(.*)/*(.*)/*$ index.php?a=$1&b=$2&c=$3&d=$4

RewriteRule ^(.*)/(.*)/(.*)$ index.php?page=$1&option=$2&action=$3 [NC,L]

现在,当我尝试通过ajax提交表单时(让我们说登录), POST数据失败或请求整体失败并显示消息:

  

TypeError:无法设置未定义的属性“data”

无论我尝试什么,即使只是在ajax.php中发布“hi”,如果isset($ _ POST)给我这个错误。

任何想法?

编辑: 这是一个示例javascript代码。我实际上不会使用它,但我用它来试验ajax请求和htaccess文件。

$("document").ready(function(){
 $(".js-ajax-php-json").submit(function(event){

        var data = {
            "action": "test"
        };
        data = $(".js-ajax-php-json").serialize() + "&"+ 'action=test' ;
        alert(data);
        //event.target.preventDefault();
        $.ajax({
            type: "POST",
            dataType: "json",
            url: 'ajax.php&skip=1', 
            data: data,
            success: function(data) {

                /*$(".the-return").html(
                    "Favorite beverage: " + data["favorite_beverage"] + "<br />Favorite restaurant: " + data["favorite_restaurant"] + "<br />Gender: " + data["gender"] + "<br />JSON: " + data["json"]
                );*/

                //alert("Form submitted successfully.\nReturned json: " + data["json"]);
                return false;
            },
            error: function(XMLHttpRequest, textStatus, errorThrown){
                console.log(errorThrown + ' ');
                return false;
            }
        });
        alert("loads up to here");
        return false;
    });
 });

它加载bu实际请求失败,并带有上面提到的错误。

更新: 好吧,似乎问题主要存在于Chrome浏览器中。尝试用firefox + firebug加载就好了。通过添加一个警报('成功')进行测试;成功事件。所以现在的问题是,为什么在使用chrome时会失败?

更新:只是为了确保我尝试使用纯javascript来测试ajax。它再次适用于Firefox,但在chrome上它会抛出相同的typeError。这次虽然请求确实被发送到tha ajax.php文件(因为我没有在try catch中包含它)

function loadXMLDoc()
    {
        var xmlhttp;
        if (window.XMLHttpRequest)
        {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp=new XMLHttpRequest();
        }
        else
        {// code for IE6, IE5
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange=function()
        {
            if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {
                //document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
                alert(xmlhttp.responseText);
            }
        }
        var data="fname=Henry&lname=Ford";
        xmlhttp.open("GET","/marketing/cms-admin/includes/ajax.php",true);
        xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");

        xmlhttp.send(data);
    }

0 个答案:

没有答案