【问题标题】:How to get an element with selector after using jquery ajax? $.ajax()使用 jquery ajax 后如何使用选择器获取元素? $.ajax()
【发布时间】:2012-02-24 01:13:38
【问题描述】:

我想在调用 $.ajax() 后得到一个带有 ID 的 div 元素 这是我的代码:

$.ajax({

  url: "PO_Header.php",
  data: "supplier="+selectedId,
  cache: false,
  success: function(html){
    $("#PO_Header").empty(); 

    $("#PO_Header").append(html);

  }
});

$("#PO_Header").append(html); 将附加整个 html 页面,我想要的是获取具有特定 id 的元素。假设 inPO_Header.phpa 带有id='mydiv' 的 div 元素将被注入到我的当前页面中。

【问题讨论】:

标签: jquery


【解决方案1】:

使用jQuery的加载:

$('#PO_Header').load('PO_Header.php #mydiv', { 'supplier': selectedId } );

它允许您加载页面片段。正如他们的documentation 指出的那样:

加载页面片段 .load() 方法与 $.get() 不同,它允许我们指定一部分 要插入的远程文档。这是 使用 url 参数的特殊语法实现。如果一个或多个 空格字符包含在字符串中,字符串的一部分 在第一个空格之后被假定为一个 jQuery 选择器 确定要加载的内容。

因此它只会将来自 PO_Header.php 的<div id="myDiv"></div> 注入到您的元素中。

【讨论】:

  • 那么 load() 和 ajax() 有什么区别呢?感谢您为我提供有用的解决方案。
  • $.ajax() 是 jQuery 提供的用于处理 XmlHttpRequest 对象的通用函数。但是他们添加了一大堆更精确的功能,使人们能够从中得到他们想要的东西,而无需大量不必要的参数。所以$.load() 只是$.ajax() 的一个更精确和指定的函数,它使您能够从服务器文件中获取数据并将其插入到DOM 元素中。
  • 现在我要做的就是在我的 php 页面上使用 $_POST,因为我正在传递数据。谢谢先生。
【解决方案2】:

您可以为此使用.load()

加载页面片段

.load() 方法与$.get() 不同,它允许我们指定要插入的远程文档的一部分。这是通过 url 参数的特殊语法实现的。如果字符串中包含一个或多个空格字符,则字符串中第一个空格之后的部分被假定为确定要加载的内容的 jQuery 选择器。

来源:http://api.jquery.com/load/

基本上你可以这样使用它:

$('#PO_Header').load('PO_Header.php #mydiv', { 'supplier': selectedId } );

要禁用cache,您可以在代码开头使用:

$.ajaxSetup({
  cache: false
});

编辑:

.load().get() 大致相同,除了以下几个原因:

  1. .load() 有一个隐式回调函数,当成功响应发生时,它会将返回的 HTML 内容设置到提供的元素中。

  2. url 参数有一个特殊的语法,用于指定要插入的返回文档的确定部分。

  3. 默认方法是GET。除非data 参数作为对象传递,否则使用POST 方法。

【讨论】:

  • 那么 load() 和 ajax() 有什么区别呢?感谢您为我提供有用的解决方案。
  • 跟进,我什么时候应该使用 ajax 过载
【解决方案3】:

我更喜欢在外部函数中绑定到 ajax 加载的元素,并在我的成功函数中调用它。

function binder(){
  $("#mydiv")....do something here
}

$.ajax({

  url: "PO_Header.php",
  data: "supplier="+selectedId,
  cache: false,
  success: function(html){
    $("#PO_Header").empty(); 

    $("#PO_Header").append(html);
    binder();

  }
});

【讨论】:

  • 问题是如何从 Ajax 调用返回的 html 中选择“#mydiv”元素,而不是如何操作现有的 $("#mydiv") jquery 元素。
  • @Simon,这正是它的作用。直到 ajax 成功函数才调用绑定函数。也许我不明白你的评论。
  • 我认为原作者想从 ajaxed HTML before 中选择#mydiv 元素,它被附加到#PO_Header。至少我是这么理解的。
【解决方案4】:

试试这个

$.ajax({

  url: "PO_Header.php",
  data: "supplier="+selectedId,
  cache: false,
  success: function(html){

    var new_html = $(html).find('#mydiv').html();

    $("#PO_Header").empty(); 

    $("#PO_Header").append(new_html);

  }
});

【讨论】:

  • 我试过了,它的作用是注入整个html页面而不仅仅是指定的div
  • 我修改了变量名,以便更清楚地了解发生了什么。我可以向您保证,当我在自己的应用程序中使用此技术时,它会起作用。
【解决方案5】:

我发现这个来自 CSS-Tricks 的示例非常有帮助 -

http://css-tricks.com/ajax-load-container-contents/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-24
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2017-10-31
    相关资源
    最近更新 更多