【问题标题】:PHP echo javascript doesnt work in if statementPHP echo javascript在if语句中不起作用
【发布时间】:2020-12-07 03:38:56
【问题描述】:

所以代码看起来像这样:

<script>
function createFolder(folder){
    $.ajax({
    url: "index.php",
    type: "POST",
    data: {'folder':folder},
    success: function(data) {
        console.log("successful post");
        }
    });
}
</script>

<?php
if(isset($_POST["folder"])){
    $folder = $_POST["folder"];
    if(!file_exists($folder)) {
        mkdir($folder);                         <--- this code runs
        echo '<script>alert("qwe")</script>';   <--- this code doesnt run 
    }
    else {
        echo '<script>alert("qwer")</script>';  <--- this code doesnt run
    }
    echo '<script>alert("qwert")</script>';     <--- this code doesnt run 
}
echo '<script>alert("qwerty")</script>';        <--- this code runs
?>

..so 在我检查文件是否存在的 if 语句中,echo 不起作用,但是 mkdir($folder) 命令成功运行,这让我有点困惑。为什么 echo 在 if 语句中不起作用?

【问题讨论】:

  • 其他警报是否有效?

标签: javascript php html if-statement echo


【解决方案1】:

&lt;script&gt; 标签只有在您将它们放入 DOM 元素的 HTML 时才会被执行。这不会自动发生,您需要在 success 函数中执行此操作。

function createFolder(folder){
    $.ajax({
        url: "index.php",
        type: "POST",
        data: {'folder':folder},
        success: function(data) {
            console.log("successful post");
            $("#somediv").html(data);
        }
    });
}

【讨论】:

  • 这会将 div 的内容设置为他所在的整个页面以及额外的回声
  • @bluejayke 仅当它的脚本回显整个页面时,即使它被 AJAX 请求调用。
【解决方案2】:

好的,你正在尝试使用 Ajax 和 JavaScript 从 php 服务器获取值,那么我猜你想在收到页面时提醒页面

问题是

if(isset($_POST["folder"]))

仅在实际的 Ajax 请求本身中为真,它只从服务器获取数据作为字符串,但实际上并不执行它

如果您希望代码在页面上执行,您必须在客户端的成功调用 Ajax 上执行此操作,所以

<script>
function createFolder(folder){
    $.ajax({
    url: "index.php",
    type: "POST",
    data: {'folder':folder},
    success: function(data) {
        document.body.innerHTML+=data
         // Or maybe data.responseTezt or something idk 
        // Look up in the API how to get the text content
        console.log("successful post");
        }
    });
}
</script>

如果没有设置“文件夹”,那么在服务器端只回显 JavaScript,

同样在客户端,为了真正执行你的 JavaScript,你可能需要创建一个新的 Dom 解析器

所以整个php文件基本上是

<?php
if(isset($_POST["folder"])) {
    //All of your other code
} else {

?>
<!--all of your HTML code-->
<script>
function createFolder(folder){
    $.ajax({
    url: "index.php",
    type: "POST",
    data: {'folder':folder},
    success: function(data) {

      
         // Or maybe data.responseTezt or something idk 
        // Look up in the API how to get the text content
        var dp= new DOMParser()
        var doc=dp.parseFromString(data,"text/html")
        Array.from(doc.children).forEach(t=>
            document.body.appendChild(t)
        )
  
        console.log("successful post");
        }
    });
}
</script>
<?php } ?>

【讨论】:

  • JavaScript 在分配给innerHTML 时不执行。
  • @barmar true 有时会发生,可能需要制作一个 DOMParser,循环遍历新的文档元素并一次将它们添加到正文中(在循环中)
  • @barmar ya 你也可以评估特定的 JavaScript,但如果一堆 html 与 JavaScript 一起回显,我认为 Dom 解析器是唯一的方法
  • “好吧,你正试图从使用 Ajax 和 JavaScript 的 php 服务器获取值,那么我猜你想在收到页面时提醒页面”好吧,不。我想在 mkdir 成功或失败时提醒页面(因为 dir 已创建或名称无效)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-19
相关资源
最近更新 更多