回调jquery函数中的resultStr中的php,无效

时间:2015-11-18 15:14:40

标签: php jquery laravel view callback

我有一个视图,控制器呈现视图发送一些数据,例如$ sizes。 在视图中我有一个jquery函数,它基于表单post从数据库中检索对象并返回一个json响应。 在回调函数中,我附加了一个resultStr,以便用我从数据库中获取的项更新视图。 问题是我正在使用laravel和刀片,如果脚本与视图分离,刀片也不会被解析。 所以我想,好吧我会让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);

                    }

                })
            });

        });
    });

1 个答案:

答案 0 :(得分:0)

基于上面的长评论帖,似乎答案是......

您有一个引用.js文件的PHP页面。在单独的.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代码的字符串,但在浏览器中这些只是字符串。)
  4. 首先在服务器上处理PHP代码一次。该代码的结果将作为网页发送到浏览器。从页面在浏览器中加载的那一刻起,PHP就完成。您可以向服务器发出进一步的AJAX请求,以调用进一步的PHP操作并获取这些操作的结果。但是您无法在浏览器中运行PHP代码