2

我正在使用 JQuery Ajax 将表单发布到 cfc。

当发生错误时,例如重复发布帖子,cfc 会检查并执行简单的重定向。就像这样:

<cfif rsDuplicate.RecordCount GT 0>
  <cflocation url="/items/new" addtoken="no">
</cfif>

发生此错误时,重定向变得疯狂,并且似乎向我的浏览器发送了一个 URL,其中包含整个网页的 HTML,即它像这样http://mysite/items/<!doctype html><html lang="en"><meta charset="utf-8">...

我不明白它为什么这样做。我很确定这与我通过 Ajax 对 CFC 进行原始调用有关,但如果我要求服务器将我重定向到新页面,那么它肯定根本不涉及客户端吗?

我也包含data-ajax="false"在我的表单标签中,因为我在某处读到这可能会有所帮助,但它没有。有任何想法吗?

4

1 回答 1

1

AJAX 的 CFC(以及任何语言的服务器端对象)被视为非常像标准浏览器请求。仅仅因为您没有直接看到输出,并不会改变浏览器发送正常请求并取回数据。

例如,您可能知道,您的 cfc 遵守 application.cfc 的规则,并且会像普通浏览器页面请求一样包含页眉和页脚。

当您的重复检查触发并评估为 true 时,cfc 将被cflocation编辑到新的 url,该 cflocation 不会传递回 ajax 调用以从那里触发它。Cold Fusion 无法帮助您做到这一点。

我在一些应用程序中做了类似的事情,我所做的是返回一个包含status顶层变量的结构。它可能看起来像

<cfreturn {STATUS = 2, KEYCODE = "Duplicate entries found", DESTURL = "/err_dupes.cfm"}>

现在,在 jquery ajax 处理程序中,在成功部分(因为调用仍然成功),你可以做这样的事情..

....
if (ajaxObj.STATUS == 2) {
  alert(ajaxObj.keycode); // If you want to notify the user.
  window.location.replace(ajaxObj.DESTURL);
}
于 2015-02-08T01:36:31.180 回答