php在回调jquery函数的resultStr中,不起作用


php in resultStr in callback jquery function, not working

我有一个视图,控制器渲染视图并发送一些数据,例如$size。在视图中,我有一个jquery函数,它基于表单post从数据库中检索对象并返回json响应。在回调函数中,我附加了一个resultStr,以便用从数据库中获得的项更新视图。问题是我使用的是laravel和blade,如果脚本与视图分离,blade就不会被解析。所以我想,好吧,我会让resultStr使用纯php,但它也不起作用。例如,我把这段代码放在回调函数中:

resultStr = resultStr +
      "<?php " +
      "foreach ($possible_sizes as $size){" +
      "print('" {$size['"it'"]} '")}" +
      " ?>";
$("#results").html(resultStr);

但我在div中得到的不是数据,而是这一行:

<div id="results">
<!--?php foreach ($possible_sizes as $size){print(" {$size["it"]} ")} ?-->
</div>

问题是:为什么?

script.js 中的代码示例

    jQuery(function ($) {
        $(document).ready(function () {
            var form = $('form');
            form.submit(function (e) {
                e.preventDefault();
                $.ajax({
                    url: form.prop('action'),
                    type: 'post',
                    dataType: 'json',
                    data: form.serialize(),
                    success: function (data) {
                        var obj = (data);
                        var resultStr = "";
                        for (var i = 0; i < obj.length; i++) {
                            resultStr = resultStr + 
                            "string to be" + 
                            "inserted in the #results" +
                            "div and containing php code" +
                            "to be executed in the view";

                        }
                        $("#results").html(resultStr);
                    }
                })
            });
        });
    });

根据上面的长评论线程,答案似乎是…

您有一个PHP页面,它引用了一个.js文件。在这个单独的.js文件中,您有以下内容:

resultStr = resultStr +
      "<?php " +
      "foreach ($possible_sizes as $size){" +
      "print('" {$size['"it'"]} '")}" +
      " ?>";
$("#results").html(resultStr);

这里有一系列重大问题。。。

  1. JavaScript在客户端上运行,之后服务器端(PHP)代码已经被处理。你不能在客户端注入更多的PHP代码,因为服务器不会处理它。对浏览器来说,这只是文本。没有什么能真正执行它
  2. 即使您想在将结果注入HTML之前执行PHP代码,服务器端PHP解释器也不会处理.js文件。您可能可以进行不同的配置,但我真的不建议这样做。请将PHP保留在.php页面中。如果要将值注入JavaScript,请在页面上的script块中呈现该值,并使用它来调用.js文件中的功能
  3. 即使您将服务器配置为在.js文件中处理PHP,此PHP代码也将是一个巨大的语法错误。JavaScript不能用来构建这样的PHP代码。(它可以用来构建看起来像PHP代码的字符串,但在浏览器中这些只是字符串。)

PHP代码首先在服务器上处理一次。该代码的结果将作为网页发送到浏览器。从页面加载到浏览器的那一刻起,PHP就完成了。您可以向服务器发出进一步的AJAX请求,以调用进一步的PHP操作并获得这些操作的结果。但是您不能在浏览器中运行PHP代码