首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在JSON函数发送成功后执行JQuery函数?

如何在JSON函数发送成功后执行JQuery函数?
EN

Stack Overflow用户
提问于 2012-08-11 19:02:55
回答 1查看 828关注 0票数 0

我使用struts2-jQueryplugin和struts2-json-plugin。

我的问题是,-- jQuery函数在操作类中的动作函数之前执行。

1) onchange=verifyChosenLanguage(this.value).调用在JSP页面上定义的jQuery函数

2)在我的动作类loadLanguages,中定义的动作函数是onChangeTopics="reloadFrameworks".调用的

3)在LanguagesFormAction.java中,定义了布尔变量FrameworksExist。因此,如果DAO函数告诉我它存在所选语言的框架,否则我将FrameworksExist=true,设置为false。因此,在jQuery函数中,我测试FrameworksExist==true还是FrameworksExist==false。

但不幸的是,我注意到的是,在发出“成功”之前,调用了loadLanguages onchange事件。所以我的函数仍然发现FrameworksExist==false.

如何在select触发的动作函数返回字符串(成功)之后执行jQuery函数?

jQuery函数:

代码语言:javascript
复制
function verifyChosenLanguage(value){
  var someText = '<s:property value="FrameworksExist"/>';
  alert(" FrameworksExist = "+someText+"what"); // this gives me always "false"
}

表格的双重选择:

代码语言:javascript
复制
<s:url id="remoteurl1" action="loadLanguages"/>
<sj:select 
  onchange="verifyChosenLanguage(this.value)"                   
  href="%{remoteurl1}"                          
  label="Category "                     
  id="IdChosenLanguage"                 
  name="IdChosenLanguage"   
  onChangeTopics="reloadFrameworks"         
  list="languages"                      
  listKey="lang_id"             
  listValue="lang_name"                     
  emptyOption="false"                           
  headerKey="None"                          
  headerValue="Select a language"
/> 

<s:url id="remoteurl2" action="loadLanguages"/> 
<sj:select                                      
  href="%{remoteurl2}"
  label="Framework "                        
  id="IdChosenFramework"
  name="IdChosenFramework"                  
  formIds="formLanguages"           
  reloadTopics="reloadFrameworks"                   
  list="frameworks" 
  listKey="frame_id"                        
  listValue="frame_name"                    
  emptyOption="false"                           
  headerKey="None"                          
  headerValue="Select a Framework"
/>

LanguagesFormAction.java:

代码语言:javascript
复制
@Actions( {
  @Action(value = "/loadLanguages", results = {
    @Result(name = "success", type = "json")
  })
})
public String loadLanguages(){

  // instructions
  if ( (languageDAO.countFrameworks(Long.valueOf(IdChosenLanguage)!=0){
    FrameworksExist=true;
  }
  else{
    FrameworksExist=false;
  }
  // instructions
  return "success";
}
public String getJSON()
{
   return loadLanguages();
}
EN

回答 1

Stack Overflow用户

发布于 2012-08-11 19:40:43

在加载FrameworksExist时,将计算jQuery函数中的jQuery值。请记住,您使用了一个常规的struts2属性标记,它不能根据对操作的ajax调用神奇地更改或重新加载其值。

代码语言:javascript
复制
function verifyChosenLanguage(value){
  var someText = '<s:property value="FrameworksExist"/>'; // <-- Evaluated on first load of your JSP
  alert(" FrameworksExist = "+someText+"what"); // Does not change based on ajax calls      
}

loadLanguages操作只更改<sj:select>项的值,因为这是它所应用的全部内容。按需要调用loadLanguages并不会更新JSP页面上的所有值。

编辑:

如果希望从select输入交互中获得FrameworkExists的值,可以通过以下操作订阅适当的主题:

代码语言:javascript
复制
$.subscribe('topicName', function(event,data) {
    // Parse for and prcess your FrameworkExists data here as you wish.
});

您可以在演示站点上看到带有JSON结果的远程链接示例。

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

https://stackoverflow.com/questions/11916845

复制
相关文章

相似问题

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