2

我正在创建一个 Web 应用程序并遇到以下问题。

在我的应用程序中,用户在单个页面中工作,他们在画布上绘制。有一个名为“保存”的按钮。这将获取用户 ID 以及他们在画布中创建的任何内容,并将其发送到数据库。这一切都很好。保存功能类似于:

$.ajax({
    url: "/database/write.php",
    type: "POST",     
    data: { 
        docName: name,
        docData: document_Data,
        docMode: "new"
    }, 
    success: function(html) {
        alert("Successfully Saved NEW document");
        set_Mode();
    },          
});

上面的 AJAX 请求确实将这三个值发送到 PHP 脚本,然后成功地在数据库中创建了一个新文档,我现在需要做的是将应用程序模式从保存新文档更改为编辑以前保存的文档。这意味着当用户再次保存时,他们将写入同一行,覆盖文档的先前版本。

当我将数据发送到它时,write.php它确实将数据写入数据库并查询数据库以获取该插入的文档并检索其唯一的文档 ID。使用该 ID,应用程序可以选择该文档并覆盖它。要从查询中检索文档 ID,我使用以下代码write.php

写.php

$_SESSION['DOCUMENT_ID'] = $DOCUMENT_ID;

此 $DOCUMENT_ID 是从SELECT查询中检索到的文档 ID。然后脚本完成并将控制权转移回主应用程序页面。

回到应用程序页面,我尝试检索该值,但它似乎不起作用。我可以检索$_SESSION用户第一次访问应用程序 ( id) 时设置的值,但现在是由write.php( DOCUMENT_ID) 页面设置的值。例如,下面显示了 AJAX 请求成功后调用的函数:

function set_Mode()
{
    var PHPvar_01 = <?php echo($_SESSION['id']); ?>;
    alert(PHPvar_01); //WORKS FINE

    var PHPvar_02 = <?php echo($_SESSION['DOCUMENT_ID']); ?>;
    alert(PHPvar_02); //DOES NOT WORK.          
};

我应该如何将从 PHP 查询脚本检索到的数据发送到应用程序,因为$_SESSION这里似乎不起作用。

感谢您的任何反馈。

4

4 回答 4

1

在您的 write.php 中,您应该在页面末尾回显 $DOCUMENT_ID,然后您的成功函数将在html参数中接收它。然后您应该使用传递给成功函数set_Modehtml变量进行调用。

页面加载完成并且知道文档 IDset_Mode之后,您才能调用。在初始页面加载时,您正在将文档 ID 写入函数中。set_Mode

于 2012-05-08T18:16:21.547 回答
1

那么,您的 PHP 代码只会在页面初始加载时执行一次。服务器检测到对您站点的请求,在内部加载 PHP 文档,对其进行解析并将其传递给客户端。

因此,当 AJAX 调用返回时,整个 PHP 脚本不会再次执行,因为用户没有请求整个页面,而只是向您的write.php.

您的write.php脚本必须$DOCUMENT_ID以某种方式返回,例如直接回显它,然后 jQuery AJAX 调用中的成功处理程序可以通过处理程序的参数访问它(请参阅 jQuery 文档)。

于 2012-05-08T18:18:03.977 回答
1

当页面已经加载到用户浏览器中时,您无法访问服务器上的变量,而不是使用 ajax。

你需要发回一些东西,而在 PHP 中你所要做的就是回显一些东西,并在你的 Ajax 调用的成功函数中捕获它。

在 /database/write.php 的末尾,执行

echo $_SESSION['DOCUMENT_ID'];

在 JS 中

$.ajax({
    url: "/database/write.php",
    type: "POST",     
    data: { 
        docName: name,
        docData: document_Data,
        docMode: "new"
    }, 
    success: function(data) {
        alert("Successfully Saved NEW document");
        set_Mode();
        if (data == 'something') {
           //do something with the returned DOCUMENT_ID stored in the data variable
        }
    },          
});
于 2012-05-08T18:18:49.053 回答
1

在 write.php 的末尾:

echo json_encode(array('id'=>$_SESSION['id'], 'DOCUMENT_ID'=>$_SESSION['DOCUMENT_ID']));

在您的 ajax 调用中:

success: function(data) {
    data = eval('('+data+')');
    alert("Successfully Saved NEW document");
    set_Mode(data.id, data.DOCUMENT_ID);
},     

这应该可以解决问题!

于 2012-05-08T18:18:52.027 回答