【问题标题】:How do I get data into a div without refresh?如何在不刷新的情况下将数据放入 div?
【发布时间】:2011-04-22 23:04:05
【问题描述】:

我想使用 JQuery 显示一些数据,但不知道如何显示。我有一个搜索框,用户在其中键入搜索词,然后在提交时,如果找到,将显示一个 div 和数据。如果未找到搜索词,则不应显示 div。

我知道如何在页面刷新时执行此操作,但如何在不刷新页面的情况下执行此操作。有人可以举个例子吗?


编辑:

这是我目前正在使用的。我对 JQuery 真的很陌生,所以已经发布的一些示例似乎有点不同。我不确定哪个示例适合我。

$.ajax({
  type: "POST",
  url: "http://site.com/search.php",
  data: dataString,
  dataType: 'json',
  success: function(data) {
    if(data.success == 1){
      alert('success');
    }else{
      alert('fail');
    }
  }
});
return false;

【问题讨论】:

标签: jquery


【解决方案1】:

您需要使用jQuery.ajax(如果您想在不刷新的情况下使用它)。这样的事情应该可以工作:

jQuery("#mySearchForm").submit(function() {

    var searchTerm = jQuery("#mySearchInput").val();
    jQuery.ajax({
        url: "http://my.url.com",
        data: searchTerm,
        dataType: "json", //assumes your return data-type is json
        success: function(data, textStatus, jqXHR) {
           //assumes your json has a property called response
           jQuery("#myDiv").html(data.response); 
        },
        error: function(jqXHR, textStatus, errorThrown) {
           //error-handling code
        }
    });

    return false;
});

【讨论】:

  • 嗨 Vivin,我已经在使用指向构建数据的函数的 ajax。根据您的示例,如果我理解正确,则成功函数会输出 html。我说的对吗?
  • @jim 是的。 success 函数假定您的响应是 JSON(如果不是,那么您需要相应地处理它——如果是 HTML,您可以直接将其添加到 div 中)并使用从 AJAX 调用返回的数据更新 div。
  • jim,这些参数是success 函数的标准参数。如果您不需要,您没有必须使用它们。您的示例看起来应该可以工作。您面临什么问题?
  • Vivian,我只是不知道如何向用户显示数据。当用户搜索他们想要的词时,jquery 函数指向我的 search.php 页面,并且在该文件中,如果找到的话,我有一个构建数据的函数。我可以在 Firebug 中看到我的数据,但如何让它呈现给用户是我真正的问题。我假设您的jQuery("#myDiv").html(data.response); 行是它的作用,但“响应”到底是什么。响应是什么?
  • Jim,你是如何从服务器端返回数据的?像这样的一些 JSON 可以工作 {success: true, data: "I found something"}
【解决方案2】:

您可以使用 html() 函数将所需的 html 内容加载到容器(父 div)中。 http://api.jquery.com/html/

【讨论】:

  • 谢谢JP。我现在会调查一下。也感谢您的链接。
【解决方案3】:

您必须使用 AJAX。在这里你可以找到一些很好的例子:http://net.tutsplus.com/tutorials/javascript-ajax/5-ways-to-make-ajax-calls-with-jquery/

【讨论】:

    【解决方案4】:

    无论是使用 jQuery.ajax()

    PageMethods

    【讨论】:

    • pagemethos 依赖于 ASP.NET 他可能正在使用 PHP 或其他服务器端平台
    【解决方案5】:
    • 您应该将点击事件绑定到您的提交按钮。

    • 当它被点击时,你应该阻止默认并使用 JQUery 进行 ajax 获取。

    • 根据该响应,您应该设置该 div 的 html。

    【讨论】:

      【解决方案6】:

      假设您有这样一个使用非 AJAX 工作的搜索表单:

      <form action="http://www.example.com/search" type="post">
         <input type="text" name="search" id="search" />
         <button id="searchButton" type="submit">Search</button>
      </form>
      

      在发布时它会添加一个 DIV,如下所示。

      <div id="results">
        ...
      </div>
      

      在不修改服务器端代码的情况下,您可以通过执行以下操作使其与 AJAX 一起使用。

      <script type="text/javascript">
        $(function() {
            $('form').submit( function() {
               var $form = $(this); // store a reference to the form
               // do an AJAX post using the form action and the data from the form
               // and get the result.
               $.post( $form.attr('action'), $form.serialize(), function(result) {
                    // find the results div inside the returned html and insert
                    // it in the DOM after the form element.
                    $('#results',$(result)).after($form);
               });
            });
        });
      </script>
      

      【讨论】:

      • 感谢这个例子。因为我是一个真正的 javascript 菜鸟,你能告诉我你的代码和上面的 Vivin 有什么区别吗?我只是想明白。
      • @Jim - 他使用 javascript 来获取输入并对硬编码的 url 执行 ajax 请求。我只是从表单中获取值并将它们序列化并返回到它的操作中。另一个区别是我在全功能的ajax 调用周围使用了post 便利包装器。最后,我将 div 从响应中提取出来,这意味着您的服务器端不会改变。他的示例期望只返回结果,这需要在服务器上进行一些代码更改。
      【解决方案7】:

      这是一个例子,没有显示实际的表单输入

      <label id="name_error">Please enter between 2 - 25 legibly written characters, letters  only</label>
      <div>
      <ul id="display">
      
      </ul>
      </div>
      
      <script type="text/javascript">
      $(function() {
      $('#display').hide();   
      $('#name_error').hide(); 
          $('#submit').click(function() { // could be #form .submit
      
            var twit = $("#twitter_search").val(); //the search variable name
              if (twit == "") {
                $("label#name_error").show();
                $("input#twitter_search").focus();
                return false;
              }  
      var datastring = $('#form').serialize(); 
      
      $.ajax({
         url: "<?php echo site_url('twitter/search'); ?>", //this is the same as your Form action
         type: "POST",
         data: datastring, 
          success: function(msg) {
              $('#display').html(msg).show(1000);            
              }
          }); 
          return false;       
      
      });
      });
      </script>
      

      注意成功函数后的#display,然后向上看,你会看到显示DIV。顺便说一句,该 URL 是一个 codeigniter 示例,您的会有所不同

      【讨论】:

      • 谢谢布拉德。我正在看这个。
      猜你喜欢
      • 2017-02-17
      • 2020-06-08
      • 2011-07-14
      • 2017-05-11
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多