1

我想通过 ajax GET 方法用新内容替换 DIV 内容。问题是整个页面正在加载到 DIV 中。但我只想加载新内容。

    function demoButton(){

        var forData = $('#For').text();
        var ageData = $('#Age').text();
        var occasionData = $('#Occasion').text();
        var URL ="http://127.0.0.1:8000/result/?age="+ ageData +"&occasion="+ occasionData +"&relationship="+ forData;

$.ajax({
    type: "GET",
    url: URL,
    success: function (response) {
        $("#testDIV").html(response);
    }
}); 
}

我的 DIV 块是:

<div id="testDIV"> 
 <ul id="products">
 {% for deal in deals %}
  <li data-price="{{ deal.price }}" > 
   <div class="product" >
          <div class="inner"> 
           <a href="/dailydeals/{{ deal.id }}/"><img src="{{ STATIC_URL }}/images/cimages/{{ deal.image }}" alt="image" style='width:177px;height:175px;' /> </a>
            <div class="similarProd"><a href="#">View similar product</a></div>
            <div class="heart"><a href="/usersl/{{user.id}}/{{ deal.id }}"><span>Engraved plaque fsor your<br>

              girlfriend</span></a></div>

            <div class="quickView"><a href="#qv_form{{ deal.id }}" id="fb_pop">QUICK VIEW</a></div>
            <div class="socialMedia"><a href="#"> <img src="/static/images/like.jpg" alt="Like" /></a></div>
          </div>
          <div class="description" style='width:177px;height:50px;'> <span class="price">{{ deal.price }}</span> {{ deal.description|safe }} <br />
           </div>
           <a href="/usersl/">Add to SL</a>
        </div>
                     </li>
   {% endfor %}
  </ul> 

        </div>

我正在开发一个基于 Django 的电子商务应用程序。我想用从服务器获取的内容替换 DIV 的内容,以响应对服务器的 GET 请求。但问题是整个页面正在加载到 DIV 中。

4

1 回答 1

2

让您的视图只返回适合您的 div 的 HTML,而不是完整的页面。

例如,如果您的http://127.0.0.1:8000/result/URL 仅打算在您的 AJAX 调用中使用,那么让该 URL 的视图只呈现一个没有 HEAD、BODY 标记等的模板。

您可能有一个类似这样的模板:

<ul>
  <li>
    {{ object.value }}
  </li>
<ul>

请注意,它不会从base.html模板或任何其他模板扩展,因此在呈现模板时,只会呈现您指定的模板内容。但是,没有什么可以阻止用户点击您的 URL,在这种情况下,返回的结果将不是有效的 HTML,无法在浏览器中显示。

有替代方案。您可以在 AJAX 响应中使用 JSON 提供来自服务器的数据,并从 JSON 数据构建 DOM。或者,您可以让整个页面按原样提供,并使用 jQuery 将 div 的内容仅替换为返回页面的一个子部分,如下所示:

$('#result-div').load(URL + ' #container-div');

jQuery load()函数允许您指定加载的 HTML 的片段以插入到您的 div 中。在上面的示例中,#container-div提供的 HTML 中元素的内容将插入到#result-div. 提供的 HTML 的其余部分将被丢弃。

于 2013-03-20T06:27:35.267 回答