将数据从PHP脚本发送回JQuery AJAX请求

时间:2012-05-08 18:12:24

标签: php jquery ajax session session-variables

我正在创建一个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

中使用以下代码

write.php

$_SESSION['DOCUMENT_ID'] = $DOCUMENT_ID;

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

回到应用程序页面,我尝试检索该值,但它似乎无法正常工作。我可以检索用户首次访问应用程序时设置的$_SESSION值(id),但现在可以检索write.phpDOCUMENT_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 个答案:

答案 0 :(得分:1)

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

在加载页面之后, 之后才能调用set_Mode之后知道文档ID。在初始页面加载之前,您正在将文档ID写入set_Mode函数之前。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分: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
        }
    },          
});

答案 3 :(得分: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);
},     

这应该做的伎俩!