繁体   English   中英

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

[英]Sending Data From A PHP Script Back To A JQuery AJAX Request

我正在创建一个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它确实将数据写入DB并查询数据库以获取该插入的文档并检索其唯一的文档ID。 使用该ID的应用程序可以选择该文档并将其覆盖。 要从查询中检索文档ID,我在write.php使用以下代码

write.php

$_SESSION['DOCUMENT_ID'] = $DOCUMENT_ID;

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

回到应用程序页面,我尝试获取该值,但它似乎不起作用。 我可以检索用户首次访问应用程序( id )时设置的$_SESSION值,但现在可以返回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在这里似乎不起作用。

感谢您的任何反馈。

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

你不能叫set_Mode在页面加载 ,直到你知道文档ID。 您将在初始页面加载之前将文档ID写入set_Mode函数中。

好的,您的PHP代码仅在页面初始加载后执行一次 服务器检测到对您的站点的请求,在内部加载PHP文档,对其进行解析并将其交付给客户端。

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

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

当页面已经被加载到用户浏览器中时,除了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
        }
    },          
});

在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);
},     

这应该做的把戏!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM