Symfony 在 Ajax 响应中获取 PHP 变量


Symfony get PHP variable in Ajax response

目前我一直在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 标头:命名约定