首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jquery cfml ajax

jquery cfml ajax
EN

Stack Overflow用户
提问于 2012-02-01 11:52:40
回答 4查看 564关注 0票数 0

这是令人沮丧的。我读过的任何东西都没有清楚地说明这一点。它不应该这么复杂。这是我的代码的当前状态。我一直在测试每种组合,希望它是有意义的。我只想从CFfunction返回一个记录计数,并在悬停期间显示它。

代码语言:javascript
复制
$(".alphabet").hover(function () {
  $.ajax({ type: "POST", 
  url: "cfc/basic.cfc?method=CountUsersByLetter&returnformat=json", 
  data: "nbw=" + $(this.target).val(), 
  datatype: "html",
  success: function(usercount){
  alert(usercount);
  },
  error: function (xhr, textStatus, errorThrown){ 
   // show error 
   //alert(errorThrown);
   console.log('errorThrown');
    } 
  }); 
    $(this).append($("<span>" + usercount +"</span>"));
     }, 
  function () {
    $(this).find("span:last").remove();
  }
);

<cffunction name="CountUsersByLetter" output="no" returntype="query" access="remote">
 <cfargument name="NBW" required="false" type="string" default="A" hint="name begins with">
 <cfset var qResults = "">
  <cfquery name="qResults" datasource="#request.dsn#">
   select count(id) as usercount from Temp_Duplicate_Individuals_CC
   WHERE left(lastname,1) = <cfqueryparam value="#arguments.NBW#" />
  </cfquery>
 <cfreturn #qResults#>
</cffunction>
EN

回答 4

Stack Overflow用户

发布于 2012-02-01 11:55:43

你必须明白,ajax在默认情况下是异步的,所以你必须等到服务器响应后才能使用usercount,它只在成功处理程序内部可用。可以通过将async设置为false进行同步调用,也可以等待服务器响应。

将代码移动到成功处理程序中

代码语言:javascript
复制
$(".alphabet").hover(function () {
  $.ajax({ type: "POST", 
     url: "cfc/basic.cfc?method=CountUsersByLetter&returnformat=json", 
     data: "nbw=" + $(this.target).val(), 
     datatype: "html",
     success: function(usercount){
       //alert(usercount);
       $(this).append($("<span>" + usercount +"</span>"));
     },
     error: function (xhr, textStatus, errorThrown){ 
      // show error 
      //alert(errorThrown);
      console.log('errorThrown');
    } 
  }); 

  }, 
  function () {
    $(this).find("span:last").remove();
  }
);

我不建议您进行同步调用,因为它会使整个页面等待,有时如果服务器需要时间来响应,浏览器会完全挂起。

票数 1
EN

Stack Overflow用户

发布于 2012-02-01 13:39:23

按照下面的说明更改成功函数。As函数返回的整个查询不仅只有count,所以你会在usercount参数中得到query对象,而不仅仅是count。此外,您将收到文本字符串,您可能需要使用eval()函数转换为JSON对象。

编辑:这里是完整的功能代码。我只是在研究success函数的问题,但是附加你在success之外编写的SPAN也会引起问题。

代码语言:javascript
复制
    $(".alphabet").hover(function () {
              var _$this = $(this);
              var usercount = 0;
              $.ajax({ type: "POST", 
              url: "scribble.cfc?method=CountUsersByLetter&returnformat=json", 
              data: "nbw=" + $(this.target).val(), 
              datatype: "html",
              success: function(res){
                 usercount = eval("(" + res + ")").DATA[0][0];
                 _$this.append($("<span> (" + usercount +")</span>"));
              },
              error: function (xhr, textStatus, errorThrown){ 
               console.log('errorThrown');
                } 
            }); 
        }, 
          function () {
            $(this).find("span:last").remove();
          }
        );
票数 0
EN

Stack Overflow用户

发布于 2012-02-01 22:14:57

你为什么不试试cfreturn qResults.recordCount呢?您现在返回的是整个查询对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9090516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档