【问题标题】:How to pass JSON from CFFUNCTION如何从 CFFUNCTION 传递 JSON
【发布时间】:2015-03-30 05:10:41
【问题描述】:

我是 JSON 新手,实际上是 Javascript。我实际上从某人那里找到了代码,并尝试为我正在尝试做的事情实现它。

在我的 javascript 上,我有:

function signin(var1,var2) {
Signin('login.htm?var1=' + var1 + '&var2=' + var2);
}

function skypeme(var1, var2) {
    $.ajax({
        url: "skypeme.cfc",
        dataType: "json",
        data: {a:var1, b:var2},
        success: function(userData) {
            if(userData.LOGIN == 'true' && userData.ID!='') {
                window.location = 'skype:'+userData.ID+'?chat'; 
            }
            else {
                signin(var1,var2);
            }
        }
    });
}

在我的 skypeme.cfc 上:

<cfcomponent output="false"> 
<cffunction name="cfskypeme" access="remote" returnformat="JSON" output="false"> 
<cfargument name="a" required="true"> 
<cfargument name="b" required="true">  
<cfset var stReturn = structNew()>
<cfset stReturn.LOGIN=false>
<cfset stReturn.ID="">

if user login
    check database for skypeid
        <cfif skypelist.recordcount eq 1>
           <cfset stReturn.LOGIN=true>
           <cfset stReturn.ID=skypelist.skype>
        </cfif>
        <cfreturn SerializeJSON(stReturn)>
if user not login
    <cfreturn SerializeJSON(stReturn)>

</cffunction> 

</cfcomponent>

我想要做的是调用cfc并检查用户是否登录,如果没有调用登录功能。如果用户已经登录,请检查数据库。如果找到Skype id,则启动Skype,如果没有,则什么也不做。但是发生的事情是当我从我的 html 调用 skypme() 函数时,什么也没有发生。没有错误,但 Skype 无法启动。

从 cffunction 传递 JSON 值以便它可以在 javasctipt 端执行的正确方法是什么?我尝试了很多方法,但无法让它发挥作用。请帮忙。谢谢。

【问题讨论】:

  • 不,您的 javascript ajax 请求需要 json,您应该返回 json,而不是 javascript。
  • 在您的 Skype me.cfc 中,您的任何 cfifcfreturn 语句中都不需要 cfoutput#
  • &lt;cfif user is login&gt; 是个问题。没有任何迹象表明这些变量确实存在。
  • @KevinB 如何将这些返回更改为 JSON?
  • @John 发生在你身上,只返回一个结构或数组。

标签: javascript jquery json coldfusion skype


【解决方案1】:

几个问题: 如果 skypeme.cfc 返回 200 OK(html 标头),您的 ajax 调用的成功部分将始终执行,因此返回“false”实际上将返回字符串“false”,并且成功将执行。您应该做的是始终返回一个 JSON 字符串,并且格式始终相同(还有为什么要使用查询对象?使用结构):

<cfcomponent output="false"> 
    <cffunction name="cfskypeme" access="remote" returnformat="JSON" output="false"> 
        <cfargument name="var1" required="true"> 
        <cfargument name="var2" required="true">  
        <cfset var stReturn = structNew()>
        <cfset stReturn.LOGIN=false>
        <cfset stReturn.ID="">

            <cfif user login logic>
                <cfquery name="skypelist"> <!---check db for skypeid--->
                </cfquery>
                <cfif skypelist.recordcount eq 1>
                    <cfset stReturn.LOGIN=true>
                    <cfset stReturn.ID=skypelist.skype>
                </cfif>
            </cfif> <!--- end login logic --->

        <cfreturn SerializeJSON(stReturn)>
    </cffunction> 
</cfcomponent>

【讨论】:

  • 我已根据您的建议进行了更新。但是,我仍然没有收到来自 cfc 的任何回复
  • 如果您发布实际代码会有所帮助。我的建议是无论传递什么值,cfc 都会返回一个值
猜你喜欢
  • 2023-03-23
  • 1970-01-01
  • 2017-10-01
  • 2017-09-29
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
  • 2019-08-14
  • 1970-01-01
相关资源
最近更新 更多