首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript函数是否为php?

问Javascript函数是否为php?
EN

Stack Overflow用户
提问于 2013-03-02 02:52:43
回答 4查看 178关注 0票数 0

我在一个网站上使用WebIM进行聊天支持。我希望能够设置一个计时器,用于当客户发起聊天会话时,如果操作员/技术人员在'x‘秒内没有响应,我希望页面重定向到另一个页面,客户可以在那里留言。

一种“请稍等,我们正在尝试为您接通”之类的事情。这样,如果所有的技术人员都太忙或正在帮助其他客户,等待的客户可以稍后再试或留言(就像聊天离线时一样)。

我仔细查看了聊天脚本的创建者mibew.org,没有任何关于这个功能的东西,而且看起来他们的网站似乎已经被遗弃了。

我想出了一个想法,用Javascript的setTimeout函数在'x‘时间后运行一些php。php基本上会查询数据库,看看是否有技术人员进入了有问题的会话,如果没有,则将客户端重定向到另一个页面,解释说目前没有人可用,但他们可以留言,等等。

问题是,我没有多少使用JS的经验。

这是一种可能性吗?有没有其他更有效/更高效的方法来实现这一点?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-02 02:56:41

是的,你可以这样做。

您可以使用timeout函数每隔x秒执行一次javascript函数。

代码语言:javascript
复制
var time = 200;
setTimeout(function()
{ 
    func(); 
}, time);

然后让函数执行ajax调用,从数据库中请求一些结果,并根据结果执行一些操作。

票数 1
EN

Stack Overflow用户

发布于 2013-03-02 02:58:34

这根本不会太难。当您的超时方法指示:

代码语言:javascript
复制
 $.post('url/of/phpscript', 
        $data /* data you'd like to send*/,
        function(returnData) { doSomethingWithThisPhpValue(data) });

 function doSomethingWithThisPhpValue(data) {
     if (data == signed_in) //...
 }

当然,值测试和变量最终将取决于您从php方法返回的数据,所以我不能更精确。

票数 0
EN

Stack Overflow用户

发布于 2013-03-03 09:08:06

如何使用使javascript和PHP协同工作而不混淆的示例(ajax):

首先你需要一个javascript函数:

代码语言:javascript
复制
function example()
{
    var select = true;
    var url = '../scripts/ajax.php';

    $.ajax(
    {
        // Post select to url.
        type : 'post',
        url : url,
        dataType : 'json', // expected returned data format.
        data : 
        {
                'select' : select // the variable you're posting.
        },
        success : function(data)
        {
            // This happens AFTER the PHP has returned an JSON array,
            // as explained below.
            var result1, result2, message;

            for(var i = 0; i < data.length; i++)
            {
                // Parse through the JSON array which was returned.
                // A proper error handling should be added here (check if
                // everything went successful or not)

                result1 = data[i].result1;
                result2 = data[i].result2;
                message = data[i].message;
                // Do something with result and result2, or message.
                // For example:
                $('#content').html(result1);
            }
        },
        complete : function(data)
        {
            // do something, not critical.
        }
    });
}

现在我们需要接收ajax.php中的posted变量:

代码语言:javascript
复制
$select = isset($_POST['select']) ? $_POST['select'] : false;

如果没有设置,三元运算符会让$select的值变为false。

确保您有权在以下位置访问数据库:

代码语言:javascript
复制
$db = $GLOBALS['db']; // En example of a PDO database connection

现在,检查是否请求了$select (true),然后执行一些数据库请求,并使用JSON返回它们:

代码语言:javascript
复制
if($select)
{
    // Fetch data from the database.
    // Return the data with a JSON array (see below).
]
else
{
    $json[] = array
    (
        'message' => 'Not Requested'
    );
}
echo json_encode($json);
flush();

从数据库获取数据的方式当然是可选的,您可以使用JSON从数据库获取单行,也可以使用它返回多行。

让我给您一个示例,说明如何使用json返回多行(您将在javascript (数据)中迭代它):

代码语言:javascript
复制
function selectMultipleRows($db, $query)
{
    $array = array();
    $stmt = $db->prepare($query);
    $stmt->execute();
    if($result = $stmt->fetchAll(PDO::FETCH_ASSOC))
    {
        foreach($result as $res)
        {
            foreach($res as $key=>$val)
            {
                $temp[$key] = utf8_encode($val);
            }
            array_push($array, $temp);
        }
        return $array;
    }
    return false;
}

然后你可以这样做:

代码语言:javascript
复制
if($select)
{
    $array = array();
    $i = 0;

    $query = 'SELECT e.result1, e.result2 FROM exampleTable e ORDER BY e.id ASC;';
    foreach(selectMultipleRows($db, $query) as $row)
    {
        $array [$i]["result1"] = $row['result1'];
        $array [$i]["result2"] = $row['result2'];
        $i++;
    }

    if(!(empty($array))) // If something was fetched
    {
        while(list($key, $value) = each($array))
        {
             $json[] = array
             (
                 'result1' => $value["result1"],
                 'result2' => $value["result2"],
                 'message' => 'success'
             );
       }
    }
    else // Nothing found in database
    { 
        $json[] = array
        (
             'message' => 'nothing found'
        );
    }
}
// ...

或者,如果你想接吻(保持简单愚蠢):

初始化一个从数据库中选择一些值并返回一行的基本函数:

代码语言:javascript
复制
function getSingleRow($db, $query)
{
    $stmt = $db->prepare($query);
    $stmt->execute();
    // $stmt->execute(array(":id"=>$someValue)); another approach to execute.
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    if($result)
    {
        $array = (
            'result1' => $result['result1'], 
            'result2' => $result['result2']
        );
        // An array is not needed for a single value.
        return $array;
    }
    return false;
}

然后获取行(或单个值)并使用JSON返回它:

代码语言:javascript
复制
if($select)
{
    // Assume that the previously defined query exists.
    $results = getSingleRow($db, $query);
    if($results !== false)
    {
         $json[] = array
         (
             'result1' => $results['result1'],
             'result2' => $results['result2'],
             'message' => 'success'
         );
    }
    else // Nothing found in database
    { 
        $json[] = array
        (
             'message' => 'nothing found'
        );
    }
}
// ...

无论如何,我希望我不会因为如此精确而伤到自己的腿,但我喜欢这种技术,@Sabyre想要一个例子,所以它就在这里。如果你发现了一些奇怪的事情,请发表评论。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15164828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档