调用PHP函数表单Javascript后,页面不会加载

调用PHP函数表单Javascript后,页面不会加载,javascript,php,Javascript,Php,当我从javascript函数(位于.js外部文件中)调用PHP函数时,网页会刷新,并在PHP函数处停止加载 function completePurchase(){ //check if perosn signed in if (signedIn){ alert("Purchase Complete! Total : " + total); //Upadte database - call PHP function in MainPage2 docu

当我从javascript函数(位于.js外部文件中)调用PHP函数时,网页会刷新,并在PHP函数处停止加载

function completePurchase(){

    //check if perosn signed in
    if (signedIn){
    alert("Purchase Complete! Total : " + total);
    //Upadte database - call PHP function in MainPage2 
    document.write('<?php echo upadtePurchaseToDB();?>');

    }
}
其思想是在调用PHP函数时更新数据库

但是,调用时,页面将刷新并保持空白。 在控制台中,如果我导航到“元素”选项卡,我可以看到PHP调用:


不确定根本的问题是,我是如何使用JS调用PHP函数的,还是PHP函数的位置。

一个问题是,您试图让JS生成PHP代码,然后期望它能工作:它不能。PHP在服务器上运行,只有当浏览器请求页面时才“做事情”:PHP为浏览器生成要处理的源代码。这就是它的全部功能

当浏览器拥有这个页面时,JS就会启动,PHP就不在任何地方了:有关这方面的更多信息,请参阅,我强烈建议您阅读这方面的内容

但是,您所描述的真正问题(您的页面似乎正在重新加载,但在PHP代码中会消失)是由于您使用了
document.write()
,而它的作用与您认为的不同

document.write
是JS中最早的函数之一,它的级别非常低:它不将文本写入网页,而是通过字节流将字节写入文档,这样文档解析器可以同时从字节流中提取数据并将其解析为页面树

当页面仍在被处理时,这似乎是安全的:
document.write
只需将字节注入open bytestream,解析器就会对其进行解析,一切看起来都很好。但是,一旦页面树完成,文档ByTestStream关闭,事情就会变得非常非常糟糕:

document.write
的任何调用都将尝试写入open bytestream,如果它已关闭,
document.write
将只打开一个bytestream:现在您有了一个空的bytestream文档。由于文档解析器看到一个openbytestream,它开始根据其中的内容构建页面树,现在页面消失了,因为这是您告诉浏览器要做的


它也不是“似乎在PHP函数处停止加载”的情况,实际发生的情况是,您已经告诉页面解析器,要形成页面树的新页面代码是字节序列
。所以解析器看,看<代码>你需要使用Ajax来做这件事。@ Mik'PoAx'KaMaMs如果你想覆盖<代码>文档>(代码)< /COD>问题,你应该能够重新打开。你可能想考虑tooas一个有两个基本问题的问题,最好解决所有的问题,而不是像只有一个一样关闭它。(因为即使他们解决了这个问题,他们仍然会被困在另一个基本问题上。)好的,谢谢你现在明白了,这篇文章中的一些答案有点让人困惑:这些答案包括让浏览器通过使用JS执行URL调用从PHP获取新的“页面”(实际上,只是数据)。
//PHP to handle data when purchase button is pressed 
  function upadtePurchaseToDB(){

    echo "PHP CALLAED AS PURCHASE BUTTON PRESSED";

};