AJAX 没有拉动 bluehost
AJAX not pulling on bluehost
我有两个简单的页面。
test.php:
<div id="demo"></div>
<script>
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("demo").innerHTML = this.responseText;
}
};
xhttp.open("GET", "sse.php", true);
xhttp.send();
}
var myVar = setInterval("loadDoc()", 2000);
</script>
sse.php
<?php
echo time();
?>
问题是 - 在我的私人 PC 上 - 它运行完美。
每 2 秒,sse.php 正在拉动,并且 demo-div 相应变化。
但是,在我的 Bluehost 网站上,相同的脚本不起作用。
它拉了一次(两秒后),仅此而已。
有趣的是,如果我手动刷新 sse.php(在另一个选项卡中)
演示 div 内容确实发生了变化!
我试图找出问题所在,但我没有想法。
有什么想法吗?
谢谢。
我在这里描述了一个类似的问题:
去获取我编写的代码并检查是否适合你。
编辑:
呼叫将是:
ajaxGetData('http://whateverurl.com', 'containerObjectId');
以及支持的功能:
function ajaxGetData(url, objId)
{
var request;
if (window.XMLHttpRequest)
{
request = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
try
{
request = new ActiveXObject('Msxml2.XMLHTTP');
}
catch (e)
{
try {
request = new ActiveXObject('Microsoft.XMLHTTP');
}
catch (e) {}
}
}
if (!document.getElementById(objId))
{
return false;
}
var obj = document.getElementById(objId); /* <= fix: added var */
ajaxLoadingIndicator(obj);
/* YOU MAY NOT NEED TO ADD/USE EVENT HANDLERS */
request.addEventListener("progress", function(event){ajaxCallBack(event, obj)}, false);
request.addEventListener("load", function(event){ajaxCallBack(event, obj)}, false);
request.addEventListener("error", function(event){ajaxCallBack(event, obj)}, false);
request.addEventListener("abort", function(event){ajaxCallBack(event, obj)}, false);
request.onreadystatechange = function()
{
if(request.readyState === 4)
{
if(request.status === 200)
{
obj.innerHTML = request.responseText;
}
else
{
obj.innerHTML = '<div id="'+id+'">Error loading data.</div>';
}
}
};
/* in my case i'm using asynch AJAX request (true) */
request.open('GET', url, true);
request.send(null);
}
/* YOU CAN GO AND SHOW FANCY LOADERS HERE */
function ajaxLoadingIndicator(obj)
{
idBase = obj.id.split("_");
id = idBase[0]+"_ajax_loading";
obj.innerHTML = '<div id="'+id+'">Loading</div>';
}
/* IF YOU DONT WANT EVENT HANDLERS, YOU DON'T NEED THE FOLLOWING FUNC */
function ajaxCallBack(e)
{
// Handle each event
switch(e.type)
{
case 'error':
{
idBase = obj.id.split("_");
id = idBase[0]+"_ajax_error";
obj.innerHTML = '<div id="'+id+'">Server unavailable. Error loading data.</div>';
} break;
}
}
经过进一步研究 - 在我的 sse.php 文件顶部添加这些行并刷新此页面,解决了我的问题。谢谢
<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
echo time();
?>
我有两个简单的页面。
test.php:
<div id="demo"></div>
<script>
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("demo").innerHTML = this.responseText;
}
};
xhttp.open("GET", "sse.php", true);
xhttp.send();
}
var myVar = setInterval("loadDoc()", 2000);
</script>
sse.php
<?php
echo time();
?>
问题是 - 在我的私人 PC 上 - 它运行完美。 每 2 秒,sse.php 正在拉动,并且 demo-div 相应变化。
但是,在我的 Bluehost 网站上,相同的脚本不起作用。 它拉了一次(两秒后),仅此而已。
有趣的是,如果我手动刷新 sse.php(在另一个选项卡中) 演示 div 内容确实发生了变化! 我试图找出问题所在,但我没有想法。
有什么想法吗?
谢谢。
我在这里描述了一个类似的问题:
去获取我编写的代码并检查是否适合你。
编辑:
呼叫将是:
ajaxGetData('http://whateverurl.com', 'containerObjectId');
以及支持的功能:
function ajaxGetData(url, objId)
{
var request;
if (window.XMLHttpRequest)
{
request = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
try
{
request = new ActiveXObject('Msxml2.XMLHTTP');
}
catch (e)
{
try {
request = new ActiveXObject('Microsoft.XMLHTTP');
}
catch (e) {}
}
}
if (!document.getElementById(objId))
{
return false;
}
var obj = document.getElementById(objId); /* <= fix: added var */
ajaxLoadingIndicator(obj);
/* YOU MAY NOT NEED TO ADD/USE EVENT HANDLERS */
request.addEventListener("progress", function(event){ajaxCallBack(event, obj)}, false);
request.addEventListener("load", function(event){ajaxCallBack(event, obj)}, false);
request.addEventListener("error", function(event){ajaxCallBack(event, obj)}, false);
request.addEventListener("abort", function(event){ajaxCallBack(event, obj)}, false);
request.onreadystatechange = function()
{
if(request.readyState === 4)
{
if(request.status === 200)
{
obj.innerHTML = request.responseText;
}
else
{
obj.innerHTML = '<div id="'+id+'">Error loading data.</div>';
}
}
};
/* in my case i'm using asynch AJAX request (true) */
request.open('GET', url, true);
request.send(null);
}
/* YOU CAN GO AND SHOW FANCY LOADERS HERE */
function ajaxLoadingIndicator(obj)
{
idBase = obj.id.split("_");
id = idBase[0]+"_ajax_loading";
obj.innerHTML = '<div id="'+id+'">Loading</div>';
}
/* IF YOU DONT WANT EVENT HANDLERS, YOU DON'T NEED THE FOLLOWING FUNC */
function ajaxCallBack(e)
{
// Handle each event
switch(e.type)
{
case 'error':
{
idBase = obj.id.split("_");
id = idBase[0]+"_ajax_error";
obj.innerHTML = '<div id="'+id+'">Server unavailable. Error loading data.</div>';
} break;
}
}
经过进一步研究 - 在我的 sse.php 文件顶部添加这些行并刷新此页面,解决了我的问题。谢谢
<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
echo time();
?>