目前我一直在Ajaxing通过控制器渲染Twig模板并将其注入页面的路线 - 一切都很好。
return $this->render('MyBundle:Requests:results.html.twig', array('system' => $lc_system));
但是,在我的 JavaScript 中,我想返回一些额外的信息......具体来说,我想要结果计数,以便我可以根据 JS 变量进行检查。我可以把它放到树枝文件中,然后以这种方式在JS中获取它,但这感觉很糟糕。
有没有办法让任何变量随 Ajax 响应一起发送下来,或者有最佳实践方法来解决这个问题。
在 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;
?>
这是一个传递给成功函数的参数。完整的签名是success(data,textStatus,XMLHttpRequest),但如果它是一个简单的字符串返回,你可以只使用他的第一个参数。与往常一样,请参阅文档以获取完整说明。
如果你没有在响应中返回实际的页面内容,我会说返回一个 JSON 响应并称它很好。但是,由于您已经在将响应正文用于某些 HTML,因此您必须想出另一种方法来返回信息。
我过去使用的一种方法是添加一个自定义的HTTP标头并以这种方式返回我的"元"值。首先,在 PHP 中设置标头(确保在任何输出之前发生这种情况):
header('X-MyCustomHeader: ' . $phpVar);
然后,你可以在jQuery success
方法中获取它,如下所示:
success: function(result, status, xhr) {
var customHeader = xhr.getResponseHeader('X-MyCustomHeader'));
}
虽然从技术上讲,您可以将自定义标头命名为所需的任何名称,但请参阅此帖子以获取最佳实践/命名约定的想法:
自定义 HTTP 标头:命名约定