我是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>如果用户已经登录,请检查数据库。如果找到skype id,就启动skype,如果没有,什么也不做。没有错误,但skype无法启动。
从cffunction传递JSON值以便在javasctipt端执行的正确方法是什么?请帮帮忙。谢谢。
发布于 2015-04-17 04:49:38
有几个问题:如果skypeme.cfc返回200OK(HTML头),ajax调用的成功部分将始终执行,因此返回"false“实际上将返回字符串"false",并且将执行成功。您应该做的是始终返回一个JSON字符串,并使格式始终相同(还有,为什么要使用query对象?使用结构):
<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>https://stackoverflow.com/questions/29338790
复制相似问题