我可以通过HTML文件返回JSON数据吗?

时间:2013-02-03 16:33:43

标签: php jquery json

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

我需要用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');
});

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

你可以通过这样做来绕过框架试图做的事情:

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

但是,如果框架没有内置JSON的能力,我会感到非常惊讶。