使用Prototype解码zend json ajax响应

时间:2014-01-04 14:51:41

标签: ajax json zend-framework magento-1.7 prototypejs

您好。我使用原型v1.7进行ajax调用并使用zend发送响应。

这是我的回复代码

{"html":"\r\n#s_del {\r\n  float: right;\r\n}\r\n#s_link
 {\r\n  float: left;\r\n}\r\n#search_view {\r\n  display: inline-block;\r\n  width: 193px;\r\n}\r\n
\r\n\r\njQuery.noConflict();\r\n\r\n"
,"success":"true"}

实际上我的回复代码包含样式标记,脚本标记和其他html标记。

我的原型代码是

var reloadurl = "getUrl('savesearch/ajax/save') ?>";

    new Ajax.Updater('layer_save',reloadurl, {
    method: 'post',
    requestHeaders: {Accept: 'application/json'},
    evalScripts: 'true',
    parameters: "searchname="+searchname,
    onLoading: function(){ $('loadingmask').show();},
    onSuccess: function(transport) {
    $('loadingmask').hide();
        var json = transport.responseText.evalJSON(true);
        if(json.success == "true")
        {    
           $('layer_save').innerHTML = "";
           $('layer_save').innerHTML = json.html;
           $('viewsearch').simulate('click');
        }
        else
        {
           // Failed to update

           alert("Not a success, no update made");


         }
    }
    });

但是当div加载响应时,我只得到这个{“html”:“

当我警告json.html时,所有html都正确显示,没有斜杠。

有人可以帮我修复一下吗?

3 个答案:

答案 0 :(得分:1)

Ajax.Updater旨在获取ajax调用的任何输出,并将其转储到id为“layer_save”(第一个参数)的元素中。我会在此实例中使用Ajax.Request()方法,并确保您的后端脚本设置标题Content-type: application/json

new Ajax.Request(reloadurl, {
    method: 'post',
    evalScripts: 'true',
    parameters: "searchname="+searchname,
    onLoading: function(){ $('loadingmask').show();},
    onSuccess: function(transport) {
        $('loadingmask').hide();
        //if you set the json header this is auto-evaluated to json
        var json = transport.responseJSON;
        if(json.success == "true")
        {    
           $('layer_save').update(json.html);
           $('viewsearch').simulate('click');
        }
        else
        {
           // Failed to update

           alert("Not a success, no update made");
        }
    }
});

答案 1 :(得分:0)

您的样式应该是样式标记,并且您的脚本应该是脚本标记(尽管我不认为脚本是通过innerHTML执行的)。

{
    "html": "<style>\r\n#s_del {\r\n  float: right;\r\n}\r\n#s_link{\r\n  float: left;\r\n}\r\n#search_view {\r\n  display: inline-block;\r\n  width: 193px;\r\n}\r\n</style>\r\n<script>\r\njQuery.noConflict();\r\n</script>\r\n",
    "success": "true"
}

我不知道原型,所以我不知道那里是否有错误。

答案 2 :(得分:-1)

我建议删除float指令。 URL存在(未截断)但隐藏。 JSon是对的。