Jquery 1.5打破了旧的1.4 $.得到调用



最近升级到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后不再工作。

查看firebug,返回了正确的数据,但是函数在进入回调后中断了。一切都停止了。

我该如何解决这个问题?我在1.5中了解到Ajax调用的变化,但是在我的项目中有超过1000个这样的调用->我甚至无法开始考虑将它们全部捕获并更改它们,更不用说对它们进行bug测试了。

编辑:奇怪的是,如果我把"文本json"而不是"json"的dataType,它的工作原理。我不认为检查我所有的代码并改变它是一个可行的选择…

编辑2:而不是返回json_encode($string),我尝试返回json_encode(array("string" => $string)),然后我做了$(element).html(data.string)。这也不起作用,我用这个调用得到的JSON数据在jsonlint.com

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

将数据in与html()函数一起使用,但期望使用JSON数据。看一下返回的mime类型如果你真的希望数据是可解析的JSON

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

jQuery将看到该头信息,并自动为您解析JSON。我猜在never版本中,它可能对dataType更严格。如果它试图将其解析为HTML(因为PHP默认发送Content-Type: text/html),那么它可能会遇到错误。

一旦你得到了你的JSON数据,你可以构建你的HTML使用html()

我抓到罪犯了。它是queue.js,一个ajax扩展,允许排队和终止ajax调用。它扩展了jquery的ajax,所以ajax最终以这种方式被破坏了。现在想办法恢复兼容性,我很好。

感谢大家的努力!

最新更新