php在resultStr中回调jquery函数,不工作

php在resultStr中回调jquery函数,不工作,php,jquery,laravel,view,callback,Php,Jquery,Laravel,View,Callback,我有一个视图,控制器渲染视图并发送一些数据,例如$size。 在视图中,我有一个jquery函数,它基于表单post从数据库检索对象并返回json响应。 在回调函数中,我附加了一个resultStr,以便使用从数据库中获取的项更新视图。 问题是我使用的是laravel和blade,如果脚本与视图分离,blade不会被解析。 所以我想,好吧,我会让resultStr改用普通php,但它也不起作用。 例如,我将以下代码放在回调函数中: resultStr = resultStr + "

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

resultStr = resultStr +

      "<?php " +
      "foreach ($possible_sizes as $size){" +
      "print(\" {$size[\"it\"]} \")}" +
      " ?>";

$("#results").html(resultStr);
resultStr=resultStr+
"";
$(“#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);

                    }

                })
            });

        });
    });
jQuery(函数($){
$(文档).ready(函数(){
变量形式=$('form');
表格提交(功能(e){
e、 预防默认值();
$.ajax({
url:form.prop('action'),
键入:“post”,
数据类型:“json”,
数据:form.serialize(),
成功:功能(数据){
var obj=(数据);
var resultStr=“”;
对于(变量i=0;i
基于上面的长评论线程,答案似乎是

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

resultStr = resultStr +
      "<?php " +
      "foreach ($possible_sizes as $size){" +
      "print(\" {$size[\"it\"]} \")}" +
      " ?>";

$("#results").html(resultStr);
resultStr=resultStr+
"";
$(“#results”).html(resultStr);
这里有一系列重大问题

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

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

    PHP必须在到达浏览器之前执行。不能用javascript动态编写php。它不是那样工作的。PHP不会在浏览器中运行。第一块代码看起来基本上是一个巨大的语法错误。第一块代码只是汇编一些文本,它没有执行任何php,它是一个字符串,插入到视图的result div中,它是php。如果我将这个脚本保存在视图中(使用blade),并且没有在js文件中分离,那么它可以工作。blade在javascript之前呈现。这就是为什么您得到的是一个字符串,而不是您正在寻找的php功能。@Chriz74:那么我很惊讶解释器忽略了
    块。这有点让我怀疑PHP解释器根本没有处理这个页面,如果PHP没有运行,那么整个概念就变得更加毫无意义了。不管怎样,这都不重要。为了从服务器动态获取数据,您需要向服务器发出AJAX请求。你不能把PHP代码放在浏览器里,指望它能工作。(想象一个用户可以通过浏览器在您的服务器上执行自己的代码的世界…)好的,这就澄清了,所以我在dinamically中插入的php根本不会被执行。所以必须有一种方法让脚本创建html并将其传递给视图,不是吗?在回调函数中创建我需要的所有框,并将它们附加到div中。@Chriz74:您的JavaScript可以生成HTML代码并将其注入,当然。如果代码的生成依赖于服务器端数据,那么您需要以某种方式将该数据提供给JavaScript。要么在页面加载时将其放入JavaScript变量(该JavaScript代码随后使用该变量),要么向服务器发出AJAX请求以获取所需的数据。