1

伙计们!

我正在尝试在 Trigger.io 中运行 HTML 应用程序。这个应用程序调用 ajax 从 PHP 页面加载一些数据。此时,我对用户进行身份验证并启动会话。在此之后,我必须调用另一个 PHP 页面。因此,我检查了会话是否已启动,我发现该会话不再处于活动状态。第二个电话是在第一个电话之后进行的。

当我尝试使用 iOS 模拟器(我使用的是 Mac - OS X Mountain Lion)从 Trigger.io ToolKit 运行应用程序时会发生这种情况。当我在 Safari 中测试同一个应用程序时,它运行良好:我的 PHP 服务器识别出之前启动的会话,并且第二个页面由 ajax 加载。

有什么我必须设置的参数吗?或者 Trigger.io 不支持 PHP 会话?

谢谢你。

马西奥

4

2 回答 2

2

您应该使用forge.request.ajax(params)ajax 请求,这是因为跨域限制,因为 Forge 应用程序file://在 iOS 上作为 url 加载。

forge.ajax.request采用与 jQuery 的 $.ajax 类似的输入,因此如果您想在网站和 Forge 应用程序中使用相同的代码,您可以轻松地在它们之间切换。

我们的文档中提供了更多文档:http ://docs.trigger.io/en/v1.4/modules/request.html#ajax

于 2012-11-05T09:41:34.357 回答
0

@Connorhd,非常感谢您的帮助!

首先,我向“app_authUser.php”发出 ajax 请求来验证用户身份。然后,如果好的,我向“app_loadFeed.php”发出另一个 ajax 请求以从服务器加载数据。

在第一个 ajax 请求中,我在 post 参数中传递用户数据(登录名和密码)来验证数据库上的用户。我在 php 文件“app_authUser.php”上调用的第一个命令是“session_start()”,如下所示:

服务器端“app_authUser.php”的代码:

<?php
    session_start();

    // Just for test;
    $idSession = session_id(); 
    echo $idSession;

    /*
     Test user authenticate. If ok, then I assign idUser to $_SESSION['idUser'] variable.
    */

    if( $loginOk == true ){
        $_SESSION[ 'idUser' ] = $User->idUser;
    }
?>    

在上面的代码中,用户已通过身份验证,并且 $_SESSION['idUser'] 已正确启动。在第二个 ajax 请求中,我测试是否设置了变量 $_SESSION[ 'idUser' ]。这就是重点:它不再设置了。同样,我首先调用“session_start()”:

服务器端“app_loadFeed.php”的代码:

<?php
    session_start();

    // Just for test;
    $idSession = session_id(); 
    echo $idSession;

    if( isset( $_SESSION[ 'idUser' ] ) ){
        /* Load data from database to return to user.... */
        echo ...
    }
    else{
        echo '0';
    }
?>

当我从 Trigger.io 编译器调用我的应用程序时,上面的测试总是返回 false。但是,当我从 Safari 调用我的应用程序时,它总是返回 true。

我发现当从在 Trigger.io 编译器上运行的应用程序进行调用时,函数“session_id()”在两个 ajax 请求中返回不同的值,但当应用程序在 Sarari 上运行时返回相同的值:

例子:

  • 来自 Trigger.io 的请求:第一个请求:echo $idSession 返回“m7dbsv7qqem92os39lv5ao2ta1” 第二个请求:echo $idSession 返回“h49pble06n7ao9pum06kt4dph0”

  • 来自 Safari 的请求:
    第一个请求:echo $idSession 返回“2cbhin1185fm5ehvbb15k6n0b1” 第二个请求:echo $idSession 返回“2cbhin1185fm5ehvbb15k6n0b1”

这意味着会话在第一个示例中不一样。为什么会这样?

我没有在我的应用程序中使用 forge.request.ajax。那是我的 ajax 代码,在我的 javascript 中:

<script>

function openAjax()
{
    try
    {
        var ajax = new XMLHttpRequest();
    }
    catch(e)
    {
        try
        {
            var ajax = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch(ee)
        {
            try
            {
                var ajax = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(eee)
            {
                var ajax = false;
                alert("Seu navegador não suporta AJAX!")
            }
        }
    }   
    return ajax;
}

// This is the function called at second time, just after I authenticate my user and have session opened.
function loadFeed(){
    var url = CT_URLBase + 'app_loadFeed.php'; // CT_URLBase = 'http://192.168.1.100/' in my local environment.
    var parameters = '';

    var ajax = openAjax();

    ajax.open('POST', url, true);
    ajax.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=iso-8859-1');

    ajax.onreadystatechange = function(){

        if (ajax.readyState == 4){

            if (ajax.status == 200){

                var retorno = ajax.responseText;

                if( retorno != '0' ){

                    /* Return OK!!! */

                }
                else{

                    /* Error: return is 0 (zero), that means session is not started.

                }
            }
        }
    }

    ajax.send(parameters);

}    

</script>

最让我误解的是,相同的代码在 Safari 中完美运行,但在 Trigger.io 中却不行。

顺便说一句,我访问了您的网站 connorhd.co.uk !很好!这是一个寻找“有趣的东西”的好地方!恭喜!

非常感谢你的帮助!!!

马西奥·克卢姆

于 2012-11-04T18:26:57.270 回答