这真让我烦恼,因为我无法用回应回应客户。
我需要用JSON回复以下数据,
header("Content-type: application/json");
$response = array();
$response['username'] = $user;
$response['password'] = $pass;
json_encode($response);
但是,我需要通过HTML文件来完成,例如:
Template::set('response', json_encode($response));
原因是,我的框架总是需要一个页面输出,如:
Template::set('response', array());
否则它会尝试自己执行它。 (可以是错误页面或空的html响应)
所以我无法使用JSON标头和echo进行响应。我基本上试图找到一个解决方法。如果我无法实现这一点,我会稍微调整一下我的框架来回应标题,但如果可能的话,我更喜欢使用一些解决方法。
聚苯乙烯。顺便说一句,这就是我的jQuery运行方式。我相信这里没有问题,但我可能会弄错,所以看看这个。
$("#doLogin").click(function(e) {
e.preventDefault(); // prevent normal form submit
$("#login-result").html('<img src="<%THEME%>images/loading.gif">');
var formData = $("#loginForm").serialize();
$.post("?page=login", formData, function(response)
{
alert(response.username);
$("#login-result").html(response.username);
},'json');
});
答案 0 :(得分:1)
您必须修改框架的代码,或者适应它。
我建议你分离业务逻辑和输出。处理请求时,不应该执行任何回显,而是准备输出,并将输出变量传递给模板。您的模板应独立于业务逻辑运行,仅取决于您传递的变量。这将使您的代码更易读,更容易修改。
至于当前问题的解决方案:我会通过添加一个传递数组的选项来扩展模板框架,框架会将其渲染为json对象。这将使业务逻辑和视图保持分离,仍然可以为您提供简单的解决方案。
答案 1 :(得分:0)
你可以通过这样做来绕过框架试图做的事情:
header('Content-type: application/json');
echo json_encode($json);
exit;
但是,如果框架没有内置JSON的能力,我会感到非常惊讶。