Symfony在Ajax响应中获取PHP变量

时间:2015-01-30 16:01:36

标签: javascript php jquery ajax symfony

目前,我已经通过控制器呈现了一个呈现Twig模板并将其注入页面的Ajaxing路径 - 一切都很好。

return $this->render('MyBundle:Requests:results.html.twig', array('system' => $lc_system));

但是,在我的JavaScript中,我想获得一些额外的信息...具体来说我想要计算结果,所以我可以根据JS变量进行检查。我可以将它放入twig文件然后以JS的方式获取它,但它感觉很糟糕。

是否有任何方法可以使用Ajax响应发送任何变量,或采用最佳实践方法来解决此问题。

2 个答案:

答案 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'));
}

虽然您可以在技术上将自定义标题命名为您想要的任何内容,但请参阅此帖子以获取最佳实践/命名约定提示:

Custom HTTP headers : naming conventions