我有一个视图,控制器渲染视图并发送一些数据,例如$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);
这里有一系列重大问题。。。
- JavaScript在客户端上运行,之后服务器端(PHP)代码已经被处理。你不能在客户端注入更多的PHP代码,因为服务器不会处理它。对浏览器来说,这只是文本。没有什么能真正执行它
- 即使您想在将结果注入HTML之前执行PHP代码,服务器端PHP解释器也不会处理
.js
文件。您可能可以进行不同的配置,但我真的不建议这样做。请将PHP保留在.php
页面中。如果要将值注入JavaScript,请在页面上的script
块中呈现该值,并使用它来调用.js
文件中的功能 - 即使您将服务器配置为在
.js
文件中处理PHP,此PHP代码也将是一个巨大的语法错误。JavaScript不能用来构建这样的PHP代码。(它可以用来构建看起来像PHP代码的字符串,但在浏览器中这些只是字符串。)
PHP代码首先在服务器上处理一次。该代码的结果将作为网页发送到浏览器。从页面加载到浏览器的那一刻起,PHP就完成了。您可以向服务器发出进一步的AJAX请求,以调用进一步的PHP操作并获得这些操作的结果。但是您不能在浏览器中运行PHP代码。