【问题标题】:jQuery AJAX call to Java/Wicket server gets no response in IE (6/7/8)对 Java/Wicket 服务器的 jQuery AJAX 调用在 IE 中没有响应 (6/7/8)
【发布时间】:2011-03-14 21:12:07
【问题描述】:

注意:这与 previous question 有关。

我有一个 Wicket 页面,该页面有一个包含一些复杂客户端交互的表单,我决定使用 jQuery 代替 Wicket(我知道要进行长时间的讨论)。本质上,我只是构建一个 JSON 对象,通过 AJAX 提交它,并在完成时执行一些操作。该调用在 Firefox 中运行良好,但在任何版本的 IE 中都不能。我已经验证没有多余的逗号。代码如下:

var lookup = {
    'name': name,
    'description': description,
    'items': [{
        'name': itemName,
        'value': itemValue
    }]
};

$.ajax({
    type: 'post',
    url: '${callbackURL}', // This file is parsed by Wicket and receives a dynamic callback URL here. This is not jQuery!
    cache: false,
    data: {'lookup': JSON.stringify(lookup)},
    contentType: 'application/json',
    complete: function() {
        alert('This never gets called in IE!')
    }
});

有什么建议吗?谢谢!

更新:看来我的问题是由于 IE 缓存资源。我已经在我的 HTML 文件中放入了无缓存代码,但似乎页面仍在缓存中(以及它引用的 JS),或者包含我的 jQuery 代码的 JS 文件正在缓存中旧的回调 URL,以便服务器不会响应,因为该 URL 不再有任何内容。当我删除漂亮的 URL 时,一切正常(因为每次 Wicket 生成 URL,它都是唯一的)。不过,即使没有服务器响应,complete 函数也不应该被调用吗?

【问题讨论】:

  • 发布有问题的代码会有很大帮助。你确定HTTP请求是否真的发生了吗?你用 IE8 调试器单步执行了吗?
  • 很抱歉最初没有发布代码。我不得不在发布我的问题的过程中离开,只是想把它拿出来。正在发出 AJAX 请求(我正在成功地从请求中保存数据),但回调永远不会被执行。没有抛出异常(我已经将调用包装在 try/catch 中,并且从未将其捕获),并且我已将 error: function(request, status, err) { ... } 添加到 $.ajax() 调用并验证那里没有返回错误。

标签: java jquery ajax internet-explorer wicket


【解决方案1】:

您能否发布您用于进行 AJAX 调用的代码,并说明它在 IE 中是如何不起作用的?是否在 IE 中没有发出调用 AJAX 请求,请求是否返回错误,处理响应是否存在问题?

这通常归因于无关的逗号,但您已经将它们排除在外,所以我认为需要更多信息才能提供帮助。

【讨论】:

  • 您可以尝试在调用中添加一个 dataFilter 参数,以查看它是否是某种解析错误(尽管我希望调用处理的错误。您也可以尝试添加请求超时。有可能是某些东西阻止了 IE 接收整个响应,在这种情况下您会收到超时错误
【解决方案2】:

这是由于激进的 IE 缓存造成的。它是通过向 URL 添加一个唯一生成的参数来解决的,这样浏览器每次都会认为它是一个新 URL。

【讨论】:

    猜你喜欢
    • 2011-01-22
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    相关资源
    最近更新 更多