<cflocation>重定向导致HTTP错误414 - 请求URL太长</cflocation>

时间:2015-02-07 22:52:06

标签: jquery ajax coldfusion coldfusion-11

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

当发生错误时,例如发出重复的帖子,cfc会对此进行检查并执行简单的重定向。它是这样的:

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

发生此错误时,重定向会变得很疯狂,并且似乎会向我的浏览器发送一个包含整个网页的HTML的网址,例如http://mysite/items/<!doctype html><html lang="en"><meta charset="utf-8">...

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

我还在表格标签中加入了data-ajax="false",因为我在某处读到了这可能会有所帮助,但事实并非如此。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

AJAX&#39; 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);
}