【问题标题】:getJson fails to call Struts2 actiongetJson 无法调用 Struts2 操作
【发布时间】:2012-11-30 13:07:14
【问题描述】:

HTML 文件

<html>
<head>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">

    var $ = jQuery;
    $(function(){
        $("#introForm").submit(function(){

            $.getJSON('ajax/test.action', formInput,function(data){    
                alert(data.greeting);
            });

            return false;
        });
    });
</script>
</head>
<body>
<form  id="introForm">
    <label >Enter Your Name</label>

    <input type="submit">
</form>

</body>
</html>

Struts.xml 动作

 <package  extends="json-default" name="jsonStruts2" namespace="/ajax" >
    <action name="test" class="com.vrde.daems.action.TestAction" method="sayHello">
        <result type="json"></result>
    </action>
</package>

Java 类(TestAction.java)

public class TestAction {
    private String greeting;

    public String getGreeting() {
        return greeting;
    }

    public void setGreeting(String greeting) {
        this.greeting = greeting;
    }

    public String sayHello()
    {
        greeting = "Hello Ajax";
        return "success";
    }
}

sayHello() 方法在我点击提交按钮时没有被调用..但是当我直接输入 url localhost:8000/ajax/test 时浏览器上会显示 json 格式的内容 谁能告诉我是什么问题?

【问题讨论】:

    标签: java jquery ajax json struts2


    【解决方案1】:

    将您的输入更改为像 &lt;input id="btn_send" type="buttom"&gt; 这样的输入按钮,并将您的脚本更改为

    $("#btn_send").click(function(){
    
       $.getJSON('ajax/test.action', $('#formInput').serialize(), function(data){    
            alert(data.greeting);
       });
    });
    

    【讨论】:

      【解决方案2】:
      <script type="text/javascript">
          var $ = jQuery;
          $(function(){
              $("#introForm").submit(function(){
                  $.getJSON('./test.action', formInput,function(data){
                      alert(data.greeting);
                  });
      
                  return false;
              });
          });
      </script>
      

      如果您在同一个控制器中引用操作,这将起作用...

      【讨论】:

      • 这就是你删除的命名空间...它是必需的
      • 您在命名空间下拥有正确的方法,因此如果您已经在命名空间中,则不需要在 url 中包含它,它将自动保持不变,无论您从命名空间执行的操作将斜线后的位置...
      • 我尝试删除命名空间...仍然无法正常工作...顺便说一下 html 页面位于应用程序根文件夹中
      • 我没有收到任何错误..它重定向到同一页面..实际上它应该在警报框中显示消息
      • @user1831612:如果您使用的是 FireFox,那么 $.getJSON() 可能不起作用。您将不得不使用 $.ajax()
      【解决方案3】:

      这是因为 formInput 在您的脚本中未定义。您需要将其从getJSON 中删除。

      <script type="text/javascript">
         var $ = jQuery;
         $(function(){
           $("#introForm").submit(function(){
              $.getJSON('ajax/test.action', function(data){
                  alert(data.greeting);
              });
              return false;
           });
         });
      </script>
      

      【讨论】:

        【解决方案4】:

        试试

        <script type="text/javascript">
        
        var $ = jQuery;
        $(function(){
        
            $("#introForm").submit(function(){
        
        
                $.getJSON("<s:url action='test' namespace='ajax' includeParams='none' />", formInput,function(data){
        
                    alert(data.greeting);
                });
        
                return false;
        
            });
        
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-27
          • 1970-01-01
          相关资源
          最近更新 更多