【问题标题】:why does jQuery callBack handler returns [object Object]为什么jQuery callBack处理程序返回[object Object]
【发布时间】:2020-03-13 17:17:05
【问题描述】:

我建立了一个 SessionMgr.cfc

<cffunction name="jgetValue" access="remote" returntype="string" output="yes" returnFormat="json">
    <cfargument name="variablename" type="string" required="yes">
    <cfset var result = 0>
    <cfset result = Evaluate("session" & "." & arguments.variablename)>
    <cfset var ReturnValue = result />
    <cfreturn result />
</cffunction>

在coldfusion 中设置/获取会话变量来运行我所有的$.ajax 调用,而且我似乎做错了什么。我已经阅读并阅读了 stackoverflow 以及 google 可以生成的关于该主题的每一页,也许这里有人可以解释我做错了什么。

这是我的 getter();、我的 getValue() 和 getCalBack();,正确的值在 getValue() 中是正确的,但我尝试的所有内容都将 [object Object] 返回到 getCAllBack() 处理程序; 这是我的代码;

// rID in this instance is session.rID
var tReportID = getValue('rID');
alert(tReportID);

function getValue(a) {  
    return $.ajax({
                url: "cfc/SessionMgr.cfc",
                type: "get",
                dataType: "text",
                data: {
                    method: "jgetValue",
                    variablename: a
                },
              success: function(response) {
                  obj = JSON.parse(response);
                  //alert('in getValue: ' + obj);
                  console.log('getValue: ' , a , ' value: ' , JSON.parse(response));
              },
              error: function(msg) {
                  console.log(msg);
              }
          });
    //alert(' in returnVal: ' + obj);
 }

任何帮助将不胜感激。 因此,我将代码更新为您的建议 Prince,但是我仍然在警报中收到 [object Object]。

如果我分解对象,如何取出 responseText?它具有正确的价值;响应文本:“12”

【问题讨论】:

  • 90% 的时间返回值是一个简单的数值,另外 10% 是单个字符串值,例如 'Select',如果有帮助的话。
  • 所有这意味着你正在使用的工具,即 alert() 不知道如何显示复杂对象的内容,比如结构,所以它使用默认的"object object"。对于复杂对象,请使用console.log( obj )。此外,使用 jquery 比依赖 Adob​​e 的 ajax 组件的有问题的实现更好......请发布 SessionMgr.cfc 的代码,以便有人可以帮助您解决 jquery 代码的问题。

标签: javascript jquery ajax callback coldfusion


【解决方案1】:

改用 cfajaxproxy

<cfajaxproxy cfc="CFC/SessionMgr"       jsclassname="SessionMgr" />

然后在

<script>
var s = new SessionMgr();
s.setValue('rID', x);
ReportID = s.getValue('rID');
</script>

【讨论】:

  • 帮自己一个忙,不要使用CF的ajax组件。它们已经过时且有缺陷的 IMO。请使用 SessionMgr.cfc 代码更新您的问题,有人可以帮助您解决原始问题。
  • 好吧,没有解释如何简单地使用 ajax 来做到这一点,而且这是可行的,所以..
  • Adobe 的 ajax 东西是出了名的错误,因此建议避免在新应用程序中使用它。是的,解释不清楚,但看起来你离得不远了。听起来 json 响应是一个结构 {responseText: "12"},您需要指定包含该值的键的名称,即在您的示例中,使用 obj.responseText。 (另请参阅其他 cmets,了解您看到“[object object]”的原因)
  • 问题是ajax调用默认是异步的,但是代码使用它就好像它是同步的(等待响应)。您必须指定asynch: false。我通常不那样使用它,但是here's a working example。根据您对这些值所做的操作,可能会更清洁,只需在 success() 回调中进行响应即可,like this
  • omg,我知道我错过了整个森林,我会实施这个并在我让它工作时再次发表评论。自从我涉足 ajax 和 Coldfusion 已经有 8 年了,所以请忍受我的生锈。再次感谢 Ageax。
【解决方案2】:

尝试改变:

dataType: "text",

到:

dataType: "json",

【讨论】:

    猜你喜欢
    • 2011-07-13
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多