2014-08-29 73 views
-1

首先的时候,我不是真的熟悉JQuery的AJAX。通过尝试我在网上找到的所有内容,我想出了下面的代码,并且说实话我并不完全理解它。让AJAX请求按钮被点击

我希望显示一个引导模式,其中包含单击按钮时数据库中的记录。 我的问题是,当页面加载时,它已经打开了模式,而不是点击按钮时。

<button id="modalData">Load Modal</button> 

<div class="modal fade" id="modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 
    <div class="modal-dialog modal-lg"> 
     <div class="modal-content"> 
      <div class="modal-header"> 
       <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button> 
       <h4 class="modal-title" id="myModalLabel">Plantilla</h4> 
      </div> 
      <div class="modal-body"> 
       <table class="table table-striped table-bordered table-hover"> 
        <thead> 
         <tr> 
          <th>Item Code</th> 
          <th>New Item Code</th> 
          <th>Position</th> 
          <th>Station</th>          
         </tr> 
        </thead> 
        <tbody> 
         <c:forEach var="plantilla" items="${sessionScope.plantilla}">          
          <tr> 
           <td><c:out value="${plantilla.getItemCode()}"/></td> 
           <td><c:out value="${plantilla.getNewItemCode()}"/></td> 
           <td><c:out value="${plantilla.getPosition()}"/></td> 
           <td><c:out value="${plantilla.getStation()}"/></td>                   
          </tr> 
         </c:forEach> 
        </tbody> 
       </table> 
      </div> 

     </div> 
    </div> 
</div> 

这是我的脚本:

$("#modalData").click(loadPlantilla()); 

$.when(loadPlantilla()).done(function() { 
    $('#modal').modal('show'); 
}); 

function loadPlantilla() {     
    return $.ajax({ 
     url: './TryAjax', 
     type: 'POST', 
     error: function() { 
      alert('Ajax readyState: ' + xhr.readyState + '\nstatus: ' + xhr.status + ' ' + err); 
     } 
    }); 
} 

,这是我的Servlet:

PlantillaViewDao dao = new PlantillaViewDao(); 
List<PlantillaView> plantilla = dao.read(); 

HttpSession session = request.getSession(); 
session.setAttribute("plantilla", plantilla); 
+0

$ .when执行你的方法...这就是为什么它显示在页面加载 – jvecsei 2014-08-29 00:51:10

回答

2

你调用该函数,而不是立即的传递引用。

$("#modalData").click(loadPlantilla); 

你的Ajax请求还可以使用.done

function loadPlantilla() {     
    $.ajax({ 
     url: './TryAjax', 
     type: 'POST', 
     error: function() { 
      alert('Ajax readyState: ' + xhr.readyState + '\nstatus: ' + xhr.status + ' ' + err); 
     } 
    }).done(function() { 
     $('#modal').modal('show'); 
    }); 
} 

快速浏览一下这个fiddle

+0

为什么'.click(loadPlantilla);'没有'()'?看起来,当它有'()'时,它会在页面加载时调用该方法。 – lxcky 2014-08-29 01:09:09

+1

因为你传递了一个引用 - 这是一个回调方法。当链接被点击时它会被调用。 '()'执行该方法,以便传递此方法的返回值。 – jvecsei 2014-08-29 01:13:17

1

$。当执行你的方法......这就是为什么它是在页面加载显示。

function loadPlantilla() {     
    $.ajax({ 
     url: './TryAjax', 
     type: 'POST' 
    }).done(function() { 
     $('#modal').modal('show'); 
     }); 
} 

你必须这样做。

或者,如果你真的想用$。当(也许是因为你有一个以上的AJAX调用)是这样的:

$("#modalData").click(function() { 
    $.when(loadPlantilla(), method2(), method3()).done(function() { 
     $('#modal').modal('show'); 
    }); 
}); 
+0

我只有一个AJAX调用。我不知道“何时”是用于进行多个ajax调用。就像我所说的,我刚开始学习JQuery和AJAX。我用你的建议替换了我的'loadPlantilla()'方法,它不再显示载入的模式。但问题是当我点击按钮时。它似乎没有工作。 – lxcky 2014-08-29 00:58:54

+0

好的。所以第一个解决方案应该适合你的问题。 – jvecsei 2014-08-29 01:00:17

+0

我编辑了我的代码。其实你应该再次考虑你的“错误”代码。 https://api.jquery.com/jQuery.ajax/。正如你看到3个参数被传递给函数'Type:Function(jqXHR jqXHR,String textStatus,String errorThrown)'。 – jvecsei 2014-08-29 01:02:29