您好。我使用原型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都正确显示,没有斜杠。
有人可以帮我修复一下吗?
答案 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是对的。