2011-04-12 80 views
0

我最近升级到1.5,功能,如:

function showData(id) { 

$.get("/url/getdata", {id : id}, function(data) { 
$("#dialogData").html(data); 
$("#dialogData").dialog({width: 500, modal: true, zIndex:22000}); 
}, "json"); 
} 

不再与添加1.5工作。

看着萤火虫,返回正确的数据,但功能在进入回调后中断。 一切都很简单。

我该如何解决这个问题?我读到了1.5版Ajax调用的变化,但通过我的项目我有超过一千次这样的调用 - >我甚至不能开始考虑全部搜索它们并改变它们,更不用说测试它的一切了。

编辑:奇怪的是,如果我把“text json”而不是“json”作为dataType,它就可以工作。编辑2:而不是返回json_encode($字符串),我试图返回json_encode(数组(“字符串”=> $字符串),而不是返回json_encode )),然后我做了$(元素).html(data.string)。 这也行不通,而且我用这个调用得到的JSON数据在jsonlint.com上是有效的

编辑3:尝试在json_encode输出之前设置标题,但没有奏效。到目前为止,唯一的解决方案是将数据类型设置为文本json。

+1

所以......你正在使用JSON,但你试图直接输入到HTML?也许你的数据类型需要是HTML?我的猜测是你的服务器没有为你的数据类型输出适当的Content-Type头,而jQuery试图使用头来猜测内容类型是什么。 – 2011-04-12 14:02:07

+0

不,我只是使用JSON传递来自PHP的数据。 PHP回应正确的JSON头文件和json_encodes。目前为止,它在1.4上效果很好。 – Swader 2011-04-12 16:05:16

+0

是的,我知道PHP将正确编码该JSON,但您还需要调用'header('Content-Type:application/json');'这样jQuery就可以正确猜测您的数据类型。要么,要么你可以使用'$ .getJSON'。 – 2011-04-12 16:10:00

回答

0

我得到了罪魁祸首。 它是queue.js,一个ajax扩展,允许排队和中止ajax调用。它扩展了jquery的ajax,所以ajax最终以这种分钟方式被破解。现在找到一种方法来恢复兼容性,我很好。

谢谢所有的努力!

1

您可以使用html()函数中的数据,但期待JSON数据。看看回来的mime类型,如果你真的希望数据是可解析的JSON。

+0

请参阅原文中的第二条评论。 – Swader 2011-04-12 16:05:36

0

听起来像你需要在服务器端设置Content-Type标题。 PHP可以很容易地做到这一点,只需在开始输出编码的JSON数据之前调用header('Content-Type: application/json');即可。

jQuery将会看到这个标题,并自动为你解析你的JSON。我猜测,在从未版本中,它可能更严格,dataType。如果它试图将其解析为HTML(因为PHP默认发送Content-Type: text/html),那么它可能会遇到错误。

一旦你有了你的JSON数据,你就可以构建你的HTML以与html()一起使用。

+0

查看原始问题的评论。标题不起作用。嗯.. – Swader 2011-04-13 06:19:51