多个JSON数组作为响应--AJAX和; PHP

时间:2014-09-19 18:21:18

标签: javascript php jquery ajax json

我有一个PHP脚本设置,它根据用户的行为(或根据具体情况没有完成)来回应JSON响应:

回复如下:

{"type":"error","response":"Script error, please reload the page and try again.
Code: [NAct]","title":"Exception","hide":false}

每个响应都是这样生成的:

echo $form -> ajax_response('error', 'Script error, please reload the page and try again.<br>Code: [NAct]', 'Exception', false);

这是由pNotify选择并显示 - 很可爱。 (参见下面.ajax请求的.done函数)

request.done(function(msg) {
    //validate json response
    if (!tryParseJSON(msg)) {
        document.write(msg);
    } else {
        var array = json_to_array(msg);
    }
    if (array['type'] !== 'none') {
        if (array['title'] !== null) {
            pushNotification(array['title'], array['response'], array['type'], array['hide']);
        } else {
            pushNotification(ucfirst(array['type']), array['response'], array['type'], array['hide']);
        }
    }
    ready_status();
});

如果 tryParseJSON()无法验证回复;响应将直接写入页面进行调试。

问题在于我echo多个回复如下:

{"type":"error","response":"Script error, please reload the page and try again.
Code: [NAct]","title":"Exception","hide":false}

{"type":"error","response":"Script error, please reload the page and try again.
Code: [NDat]","title":"Exception","hide":false}

tryParseJSON()将其视为mumbo jumbo并将其打印到页面。

问题

我如何选择上面两行作为单独的响应并通过我的函数解析它们并按顺序解析为pNotify而不将它们组合成单个JSON数组?

解决方案

正如所指出的那样,过于复杂。相反,我将每个响应(PHP端)组合成一个数组:

$res['json'][] = $form -> ajax_response('error', 'Script error, please reload the page and try again.<br>Code: [NAct]', 'Exception', false);

然后在剧本结束时回复它:

echo json_encode($res['json');

在客户端,我使用for循环,在每次迭代中将它们发送到pNotify:

request.done(function(msg) {
    //validate json response
    if (!tryParseJSON(msg)) {
        document.write(msg);
    } else {
        var obj = json_to_array(msg);
    }
    for (var i=0;i<obj.length;i++) {
        if (obj[i]['type'] !== 'none') {
            if (obj[i]['title'] !== null) {
                pushNotification(obj[i]['title'], obj[i]['response'], obj[i]['type'], obj[i]['hide']);
            } else {
                pushNotification(ucfirst(obj[i]['type']), obj[i]['response'], obj[i]['type'], obj[i]['hide']);
            }
        }
    }
    ready_status();
});

1 个答案:

答案 0 :(得分:1)

而不是创建如此sperate JSON-Outputs将其合并为一个单独的输出字符串。

为此,只需将您正在输出的两个数组包装在一个数组中,如此

$myOutput[0] = responseArray1;
$myOutput[1] = responseArray2;
echo json_encode($myOutput);

这样您将获得有效的JSON响应。其他一切只是一些肮脏的解决方法,并导致每个必须审查你的工作的人都会发抖。