【问题标题】:Ajax call to ColdFusion CFC in IE9 not completing, OK in other browsersIE9 中对 ColdFusion CFC 的 Ajax 调用未完成,在其他浏览器中正常
【发布时间】:2014-03-12 20:47:08
【问题描述】:

我在我的 ColdFusion 10 Web 应用程序中设置了许多 Ajax 调用来更新购物车中的信息。这些在 Chrome、Firefox、Safari 和 IE 10 和 11 的各种版本中都像魅力一样工作。但是,它们在 IE9 中的行为不可预测,有时甚至完全没有。在解决这个问题时,我调用了一个 CFC,它在 IE 和 Firefox 23 中都没有从 IE 9 返回任何内容。在有问题的 CFC 中,我将其设置为简单地返回单词“boo”,并发送 readyState, responseText、status 和 statusText 到开发人员工具中的 Javascript 控制台中的每个。在这两种情况下,我都得到了 readyState=4、status=200 和 statusText="OK"。但是,在 FF 中,responseText 返回“boo”(如预期的那样),而在 IE 中返回 0。

这是我对这个示例的 Ajax 调用:

var thisCall = $.ajax({
    url: "remote.cfc?method=updateTarget&target="+thisID+"&returnFormat=JSON",
    type: "get",
    async:false,
    success: function(status) {
        return status;
        }
    });

这是我的 CFC:

<cffunction name="updateTarget" access="remote" returnformat="json" output="false" hint="update target">
    <cfargument name="target" required="yes" type="string">

    <cfreturn 'boo'> <!--- added for troubleshooting --->
    <cfset session.user.target = Arguments.target>

    <cfset status = updateSubtotal()>

    <cfset status = SerializeJSON(status)>
    <cfreturn status>
</cffunction>

我已经在 Ajax 调用中使用 async:true 并在 CFC 中使用 output="true" 进行了尝试,没有任何区别。在我的代码中其他地方对类似 CFC 的其他调用在 Mozilla 和较新的 IE 浏览器中可靠地工作,但在 IE9 中却无法预测。

【问题讨论】:

  • 如果省略 jQuery,直接在 IE9 中浏览到 URL,你会得到什么?哦...您运行的是哪个版本的 jQuery?
  • 当我尝试直接浏览时,我发现了这个特定示例的问题:变量“thisID”的值中有空格。显然,IE9 不能处理空白。因此,我在变量“thisID”中添加了一个空格检查,并用“-”替换了每个空格(它不是用于该变量可能值的字符)。我在我的 CFC 中去掉了这些,它似乎有效。我会检查我的其他电话,看看它们是否也能发挥作用。我正在使用 jQuery 1.9.1。我会尝试旧版本,看看是否可行。
  • 后续:在对 Ajax 调用中使用的变量进行上述更改后,它解决了我在 Ajax 调用调用的其他方法中行为不一致的问题。这些方法取决于此调用的结果。我最终不必回到旧版本的 jQuery。非常感谢,亚当,你的问题回答了我的问题。
  • 酷!您想将您的评论发布为答案,并将其标记为已回答吗? (因此其他人知道您不再需要帮助)。
  • 等等,看来我还没有走出困境。仍然无法完成通话。我发现在 IE9 中单击大约 5 或 6 次后,每次单击都会调用一个更新购物车的方法,似乎浏览器或 jQuery 方法都停止发送请求。我通过让 CFC 方法在通话开始和结束时通过电子邮件向我发送购物车状态来确认这一点。单击 5 或 6 次后,我的方法不再有响应。这不是 IE10/11、FF 或 Chrome 的情况。当我清除缓存和会话并在 IE9 中重试时,它会运行大约 5 或 6 次点击然后停止。

标签: jquery ajax internet-explorer mozilla coldfusion-10


【解决方案1】:

我找到了我的第二个问题的答案:IE9 的 Ajax 响应缓存可以防止调用在一定数量后发出。默认情况下,FF、Chrome 和更高版本的 IE 不这样做。为了在 IE9 中进行这项工作,我将类型更改为 POST。现在它与任何其他浏览器一样工作。

重申第一个问题的答案,IE9 被 $.ajax() 方法的 url 属性中的空白所抛弃。为了解决这个问题,我替换了 url 查询中引用的变量中的空格,并在接收调用的 CFC 方法中恢复了它们。

进行这两项更改后,我的 Ajax 调用在 IE9 中的工作方式与在 FF、Chrome 和更高版本的 IE 中相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 2019-04-06
    • 1970-01-01
    相关资源
    最近更新 更多