0

这真的让我很烦恼,因为我无法用回声回应客户。

我需要用 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 标头和回显来响应。我基本上是想找到一种解决方法。如果我无法做到这一点,我会稍微调整我的框架以响应标题,但如果可能的话,我更喜欢使用一些解决方法。

附言。顺便说一句,这就是我的 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');
});
4

2 回答 2

1

您必须修改框架的代码,或者适应它。

我建议您将业务逻辑和输出分开。在处理请求时,您不应该做任何回显,而是准备输出,并将输出变量传递给您的模板。您的模板应该独立于您的业务逻辑运行,仅取决于您传递的变量。这将使您的代码更具可读性和易于修改。

至于您当前问题的解决方案:我将通过添加一个传递数组的选项来扩展模板框架,并且框架会将其呈现为 json 对象。这将保持业务逻辑和视图分离,仍然为您提供满足您需求的简单解决方案。

于 2013-02-03T16:52:09.327 回答
0

您可以通过以下方式规避框架尝试执行的操作:

header('Content-type: application/json');
echo json_encode($json);
exit;

但是,如果框架不具备发出内置 JSON 的能力,我会感到非常惊讶。

于 2013-02-03T18:26:46.623 回答