如何使用javascript轮询PHP页面?

时间:2009-08-11 02:16:50

标签: php javascript ajax

我确信这方面有一个简单的答案,但我现在正在画一个空白,任何建议指针都会很棒。

我有一个php页面[比如说counter.php],当调用[loaded / viewing]时,它连接到db并递增计数器。 我还有另一个页面有一个选择框,我想在onc​​hange事件上添加一个.js函数,它将调用/轮询counter.php文件,从而增加计数器。

有没有办法从.js调用或轮询和文件/页面,我知道这可以通过HttpRequest完成,但这似乎有点矫枉过正,因为我不想返回任何内容或更改页面上的任何内容。

提前致谢

.K


感谢您的回答,但也许我不清楚,我不想在页面上返回任何内容或更改任何内容,我只想轮询该页面。我正在寻找一种更简单的方法,而不需要使用ajax / iframe。

以下是我的例子:

counter.php

<?php
// connect to db
// increment counter val
// DOES NOT RETURN ANYTHING
?>

的index.html

<script>
increment()
{
    // I Just need to poll the page [counter.php] here,
    // thus incrementing the counter, ie no change on this page !
};
</script>

<select onchange="increment();"> ... </select>

5 个答案:

答案 0 :(得分:6)

我认为你的意思是你想要实现ajax:

http://en.wikipedia.org/wiki/Ajax_(programming)

我能想到的最快捷的途径是实现这样的目标:

<?php   
echo '1';
?>

下载jQuery

在文档的标题中执行以下操作:

<script>
$(document).ready(function() {
    $('#idOfaDiv').load('counter.php');//'1' will be injected into div id="idOfaDiv"
});
</script>

请参阅Ajax/load

此外,本网站上有很多关于AJAX的讨论。我建议在AJAX上尝试一些搜索。并且,有许多方法可以实现您的目标 - 重要的是要考虑我所建议的只是一个。

答案 1 :(得分:1)

您还可以通过DOM创建脚本标记,并附加HTML

addScript = function(src) {
        var head = document.getElementsByTagName('head')[0];
        var script = document.createElement('script');
        script.type = 'text/javascript';
        script.src = src;
        head.appendChild(script);
    }

addScript('counter.php');

在PHP中将指令返回为Javascript。

例如:

<?php 

header('content-type: text/javascript');

?>

document.getElementById('mydiv_id').innerHTML = '1';

答案 2 :(得分:1)

PrototypeJS提供了非常方便的AjaxPeriodicalExecuter对象,可以完全按照您的要求进行操作。

在此示例中,Ajax请求每10秒执行一次。您还可以通过onchange元素的<select>轻松进行Ajax调用。

function increment() {
  new Ajax.Request( '/content.php', {
        method:  'get',
        parameters:  {},
        onSuccess:  function(response, jsonHeader) {
            //If you need to do something with a response, doe it here
        },
        onFailure:  function() {
            alert('Request failed because an error ocurred.');
        }
    });
}

new PeridodicalExecuter(function(pe) {
    //Call pe.stop() to stop the timer;
     increment();    
}, 10);

答案 3 :(得分:1)

您必须与服务器通信,如果您在浏览器中,则需要通过HTTP请求进行通信。称之为Ajax,HTTPRequest,页面重载,无论如何,服务器无法分辨出来。 使用Ajax / HttpRequest加载URL,不要返回任何内容。

答案 4 :(得分:0)

XMLHttpRequest确实不是那么难,但另一件事你可以使用iframe作为目标进行表单提交。

<form action="increment_counter.php" target="my-iframe"...

只是隐藏iframe,你应该没问题。从技术上讲,目标属性已弃用,但在HTML5中,所以我不会太担心。

当然,XMLHttpRequest确实不是那么糟糕,特别是如果你使用的是js lib。

UPDATE只是为了澄清,iframe的目的不是获取或使用返回,目的是使页面不会使用target属性刷新。