我正在构建一个PHP脚本,用于在其生日中向人们发送电子邮件。我还需要一个小型的网络界面,我可以打开或关闭整个程序,观察今天谁在庆祝他的生日,看看是否有邮件无法发送。服务器上的PHP正在工作,但我正在努力与HTML和JavaScript界面。特别是从服务器获取信息的Ajax请求。它在firefox,chrome和opera中工作正常,但在Internet Explorer 8中,我没有得到服务器的响应。 readyState切换到4,但状态保持为0并且responseText为空。Ajax POST请求在Internet Explorer中不起作用
谷歌搜索后,我发现了很多人的意见JQuery的,但我不能让那个在任何浏览器中运行。我想了解更多,因为它看起来很容易,但现在我想知道如何在没有JQuery的情况下做到这一点。
编辑
在回答评论的问题,切换if和else语句产生相同的结果。顺便说一下,这个连接从“开放”改为“关闭”也是如此,但我不记得为什么我改变了它,可能只是因为挫折而尝试。最后我添加了服务器端的php代码。如果'action'是switchonoff,服务器将发回字符串数据,或者如果action为clearlog,则只有一个没有文本的头部,如果操作初始化,则为jsonarray。无论请求的服务器的HTTP状态始终为0。
function loadXMLDoc(action) {
var parameters = "action="+encodeURI(action);
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.open("POST",'http://mailer.test/App/postscript.php',true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length", parameters.length);
xmlhttp.setRequestHeader("Connection", "open");
xmlhttp.send(parameters);
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState == 4 && xmlhttp.status==200) {
if(action == 'switchonoff'){
document.getElementById("onoffbutton").innerHTML=xmlhttp.responseText;
} else if(action == 'initialize'){
var response = JSON.parse(xmlhttp.responseText);
document.getElementById("onoffbutton").innerHTML=response['onoff'];
document.getElementById("birthdays").innerHTML=response['birthdays'];
document.getElementById("errors").innerHTML=response['errors'];
} else if(action == 'clearlog'){
document.getElementById("errors").innerHTML="";
}
}
}
}
window.onload = function() {
loadXMLDoc('initialize');
}
编辑,这里的PHP脚本
include "settingschanger.php";
include "customercsv.php";
if (!isset($_POST['action'])) {
$_POST['action'] = 'dummy';
}
$post = $_POST['action'];
if(strcmp($post, "initialize") == 0) {
$settings = new SettingsChanger();
$onoff = $settings->getOnOff();
$csv = new CustomerCSV();
$csv->openFile((__DIR__).CustomerCSV::FILENAME);
$todaysbirthdays = $csv->getTodaysBirthdays();
$birthdays = "";
foreach ($todaysbirthdays as $row) {
$birthday = "";
foreach ($row as $data) {
$birthday .= $data . " ";
}
$birthdays .= $birthday . "
";
}
$errorLogArray = $settings->getErrorLog();
$errors = "";
foreach($errorLogArray as $line) {
$errors .= $line . "
";
}
$result = json_encode(array('onoff'=>$onoff, 'birthdays'=>$birthdays, 'errors'=>$errors));
header("HTTP/1.1 200 OK");
print $result;
}
if(strcmp($post, "switchonoff") == 0) {
$settings = new SettingsChanger();
$result = $settings->changeOnOff();
header("HTTP/1.1 200 OK");
print $result;
}
if(strcmp($post, "clearlog") == 0) {
$settings = new SettingsChanger();
$settings->clearLog();
header("HTTP/1.1 200 OK");
}
?>
2012-06-19
M.Smit
+1
请也显示一些PHP代码(处理发送参数的部分),它可能有问题。 –
+0
你试过切换'if'和'else'语句吗?这是正常的做法,即'if(window.ActiveXObject){..' –
+0
顺便说一句,为什么'Connection'标题设置为'open',并且'close'? –