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。

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

我怎样才能解决这个问题?我阅读了 1.5 中对 Ajax 调用的更改,但我的项目中有超过一千个这样的调用 -> 我什至无法开始考虑将它们全部搜索并更改它们,更不用说对它们进行错误测试了。

编辑:奇怪的是,如果我为 dataType 输入“text json”而不是“json”,它就可以工作。我不认为浏览我所有的代码并改变它是一个可行的选择......

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

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

4

3 回答 3

1

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

于 2011-04-12T14:01:36.773 回答
0

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

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

获得 JSON 数据后,您可以构建 HTML 以与html().

于 2011-04-12T16:14:30.057 回答
0

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

感谢大家的努力!

于 2011-04-13T13:22:48.237 回答