我正在构建一个小规模的自定义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);
}