1

这是情况

在我的 JSP 页面中,我正在调用一个动作类方法

<input type="text" class="inputstyle" name="feedName" id="feedName" placeholder="<s:text name="global.feed_name" />" required>

这是我的 Ajax JQuery

$(document).ready(function() {
        $('#feedName').blur(function() {
            var feedName=$("#feedName").val();
            if(feedName!="")
            {
                $.ajax( {
                      traditional: true,
                      type: "POST",      
                      url: "feedCheck",
                      data:"feedName="+feedName,
                      dataType: "text",
                      success: function(response) {
                          alert("AVAILABLE!");
                      },
                      error: function(data) {
                          alert("NOT AVAILABLE!!!");
                      }       
                    });
            }
        });
    });

struts.xml

<action name="feedCheck" method="feedCheck" class="com.analytic.webapp.action.AAIDCAIndexAction">
            <result name="success">DCAAnalytix.jsp</result>
            <result name="error">DCAAnalytix.jsp</result>
        </action>

动作类方法

public String feedCheck()
    {
        MClient client = (MClient) getRequest().getSession().getAttribute(
                AAI_CLIENT);
        List<String> feedNamesFromDB=mFeedManager.getAllFeedNameByClient(client.getClientKey());
        System.out.println(feedName);
        if(feedNamesFromDB.size()>0){
            if(feedNamesFromDB.contains(feedName)){
                return ERROR;
            }
        }
        return SUCCESS;
    }

ajax 调用工作正常并调用动作类方法并执行。但问题是,结果总是在 Ajax 中出错。也就是说,如果该方法返回SUCCESS ,那么网页也会发出“NOT AVAILABLE!!!”的警报。

我是阿贾克斯的新手。当我搜索时,大多数帖子也是关于返回 JSON 数据的。我不想要 JSON 数据。我只需要结果状态以及如何在 Ajax 中获得它?

4

1 回答 1

2

struts2中ajax的结果类型应该是流。在你的代码中试试这个。

<action name="feedCheck" method="feedCheck" class="com.analytic.webapp.action.AAIDCAIndexAction">
  <result type="stream">
    <param name="contentType">text/html</param>
    <param name="inputName">inputStream</param>
  </result>
</action>

在你的行动课上。您应该使用 getter 和 setter 创建类变量

private InputStream inputStream;

然后用你的方法

public String feedCheck()
{
    MClient client = (MClient) getRequest().getSession().getAttribute(
            AAI_CLIENT);
    List<String> feedNamesFromDB=mFeedManager.getAllFeedNameByClient(client.getClientKey());
    System.out.println(feedName);
    if(feedNamesFromDB.size()>0)
    {
        if(feedNamesFromDB.contains(feedName))
        {
            this.setInputStream(new ByteArrayInputStream(ERROR.getBytes()));
        }
        else
        {
            this.setInputStream(new ByteArrayInputStream(SUCCESS.getBytes()));
        }
    }
    else
    {
        this.setInputStream(new ByteArrayInputStream(SUCCESS.getBytes()));
    }

    return SUCCESS;

}

希望这会奏效。

并在您的查看页面中

$(document).ready(function() {
        $('#feedName').blur(function() {
            var feedName=$("#feedName").val();
            if(feedName!="")
            {
                $.ajax( {
                      traditional: true,
                      type: "POST",      
                      url: "feedCheck",
                      data:"feedName="+feedName,
                      dataType: "text",
                      success: function(data, success) {
                          if(data.indexOf("success")==-1){
                                  alert("Action returned Error")
                           }else{
                                 alert("Action returned Success") 
                           }
                      }      
                    });
            }
        });
    });

流数据将返回字符串“错误”或“成功”。它将在您的 ajax 在视图页面中的成功方法中可用。

于 2013-07-05T05:59:05.080 回答