目前,我已经通过控制器呈现了一个呈现Twig模板并将其注入页面的Ajaxing路径 - 一切都很好。
return $this->render('MyBundle:Requests:results.html.twig', array('system' => $lc_system));
但是,在我的JavaScript中,我想获得一些额外的信息...具体来说我想要计算结果,所以我可以根据JS变量进行检查。我可以将它放入twig文件然后以JS的方式获取它,但它感觉很糟糕。
是否有任何方法可以使用Ajax响应发送任何变量,或采用最佳实践方法来解决此问题。
答案 0 :(得分:0)
在PHP函数中使用echo而不是return。
$.ajax({
type: "POST",
url: "somescript.php",
datatype: "html",
data: dataString,
success: function() {
doSomething(data); //Data is output
}
});
在PHP中:
<?php
$output = some_function();
echo $output;
?>
这是传递给你的成功函数的一个参数。 完整的签名是成功的(data,textStatus,XMLHttpRequest),但如果它是一个简单的字符串,你可以使用他的第一个参数。与往常一样,see the docs for a full explanation。
答案 1 :(得分:0)
如果您没有在回复中返回实际页面内容,我会说要返回JSON响应并将其称为好。但是,由于您已经在使用某些HTML的响应正文,因此您必须提出另一种方法来返回信息。
我过去使用的一种方法是添加自定义HTTP标头并以这种方式返回我的“元”值。首先,在PHP中设置标题(确保在任何输出之前发生这种情况):
header('X-MyCustomHeader: ' . $phpVar);
然后,你可以在你的jQuery success
方法中得到它:
success: function(result, status, xhr) {
var customHeader = xhr.getResponseHeader('X-MyCustomHeader'));
}
虽然您可以在技术上将自定义标题命名为您想要的任何内容,但请参阅此帖子以获取最佳实践/命名约定提示: