我有一组电子邮件功能,类似下面的内容,用于弹出一个可以发送电子邮件的窗口。
.add向userController发送post请求并返回作为电子邮件窗口的VIEW。
.init被调用并设置电子邮件窗口的处理程序。
在电子邮件窗口中按下发送按钮以发送电子邮件时,将调用.send。
var Email={
con:"../application/controllers/",
dialog:null,
init:function(){..
//add event handlers for email dialog
send:function(){
var emailType=$("#emailType").prop("value");
var email=$("#email").prop("value");
if(!email){this.error("Please provide a valid email address");return false}
var emailTitle=$("#emailTitle").prop("value");
if(!emailTitle){this.error("Please provide a valid email title");return false}
var emailBody=$("#emailBody").prop("value");
if(!emailBody){this.error("Please provide a valid email body");return false}
if(emailType && email && emailTitle && emailBody){
$.post(Email.con+"userController.php",{
sendMail:"true",
emailType:emailType,
email:email,
emailTitle:emailTitle,
emailBody:emailBody,
});
return true;
}
return false;
},
add:function(id){
$("#"+id).on("click",function(e){
$.post(Email.con+"userController.php",{
showMail:"true",
emailType:this.dataset.emailType,
},
function(data,status){
if(status==='success'){
$("body").append(data);
Email.init();
}
});
});
return this;
},
}
问题在于send函数,因为$ .post ajax调用中的路径不正确。当调用add时,它会找到文件夹系统中的userController,如
因此路径“../application/controllers/userController.php”退出一个公共区域并沿着路径返回控制器。
在发送中,路径始终附加到站点根目录或公用文件夹,并返回类似http://theSite/application/controllers/userController.php
的内容为什么send ajax调用在一次情况下不使用从站点根目录到控制器的相对路径?
必须有50个其他ajax调用才能在网站上正常运行。
答案 0 :(得分:1)
ajax.post请求转到Url,而不是文件路径。
它取决于Apache上的活动重写,以及适当的php路由器,哪个文件与哪个Url相关联
我不知道你正在使用什么框架,但它不太可能使用像http://theSite/application/controllers/userController.php这样的请求
最有可能的应该是http://theSite/user,或者http://theSite/user.php,或者在您的代码中
$。员额(邮箱+ “/用户”,{
...
}
答案 1 :(得分:0)
我的假设是“电子邮件窗口”是从不同的URL加载的,因此在触发发送时,浏览器会不同地解释路径。尝试将con
设置为"/application/controllers/"
,看看是否能解决问题。如果没有,我会检查浏览器中弹出的窗口的URL,因为它可能是从稍微不同的URL加载的,因此,相对路径适用于add
而不是send
的原因。