2012-05-08 85 views
2

我正在创建一个Web应用程序,并具有以下问题。从PHP脚本发送数据返回到JQuery AJAX请求

在我的应用程序中,用户在一个页面内工作,他们在画布上绘制。有一个名为“保存”的按钮。这需要用户ID和他们在画布中创建的任何内容并将其发送到数据库。这一切工作正常。保存功能resemebles这样的:

$.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。该脚本然后完成并将控制权转移回主应用程序页面。

回到应用程序页面,我尝试检索价值,但它似乎没有工作。我可以检索当用户第一次访问应用程序(id)时设置的值,但现在由write.phpDOCUMENT_ID)页面设置的值设置为$_SESSION。例如,下面显示了一个名为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似乎并不在这里工作。

感谢您的任何反馈意见。

回答

1

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

您阿贾克斯电话:

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

这应该做的窍门!

+1

我同意凯尔,这将做这项工作。但我会建议不要使用'eval'这是一个糟糕的做法。而是让Ajax调用传递参数'dataType:'json',这将确保您成功收到的数据是json – swapnilsarwe

+0

,请不要说eval是一个不好的做法而不解释。在这种情况下,源数据是可信的(不是由一些fifo用户输入产生的),所以不需要吓倒。如果你想要更安全,你需要响应服务器端的数据,而window.JSON.parse()数据客户端(某些浏览器不支持它) – Keil

+1

我知道源数据是可信的,因此它使用eval似乎很好。但作为一名开发人员,我不会仅仅因为我认为源代码可信就做这些事情。我相信预防胜于治疗......网上有足够的文章解释为什么应该避免使用eval ...请仔细阅读它...例如:[为什么使用JavaScript eval函数是一个坏主意?] (http://stackoverflow.com/questions/86513/why-is-using-the-javascript-eval-function-a-bad-idea) – swapnilsarwe

1

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

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

1

好了,你的PHP代码能够顺利通过页面初始加载只执行一次。服务器检测到您的站点的请求,内部装载PHP文件,分析它,并将其传送给客户端。

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

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

1

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

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

在/database/write.php年底,在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 
     } 
    },   
});