2013-01-18 102 views
2

我做了一个简单的例子来显示问题:下面的表单使用jQuery .post()提交给另一个页面。

$('form').submit(function(){ 

    $.post(
     $(this).attr('action'), 
     $(this).serialize(), 
     function(data) { 
      var ret = data; 
      var final_data = $(ret).find('#holder-1').html(); 
      alert(final_data); 
     } 
    ) 
    return false; 

}) 

行动

<div id="holder-1"> 
    <h1>Content 1</h1> 
</div> 

<div id="holder-2"> 
    <h1>Content 2</h1> 
</div> 

<div id="holder-3"> 
    <h1>Content 3</h1> 
</div> 

日志显示,data内容看起来很好。但是,一旦我尝试找到#holder-1.find(),它返回undefined

这几乎是一样的,在jQuery的API页面的最后一个例子http://api.jquery.com/jQuery.post/

以下是完整的(不)工作在我的网站托管例如,一些console.log()沿着代码:

形式:http://www.peixelaranja.com.br/tmp/post.php

我试过几乎任何:通过具体的数据类型为4个参数,使用$.ajax()代替.post(),USI ng .filter()而不是.find(),jQuery的不同版本...没有任何工作。所有的文件是UTF-8

任何想法?

+0

什么是'ret'的价值? –

+0

'filter'确实对我有用,无论是Firefox还是Chrome。 –

回答

4

我知道你提到你使用filter而不是find,但是,这应该工作。 jQuery删除了html,head,body标签等。一旦完成,#holder-1现在处于层次结构的顶层。

这拨弄表明filter做工作:

http://jsfiddle.net/68jEt/

var html = '<!doctype html><html dir="ltr" lang="pt-BR"><head> <meta charset="UTF-8"> <title>Return Test</title></head><body> <div id="holder-1">  <h1>Content 1</h1> </div> <div id="holder-2">  <h1>Content 2</h1> </div> <div id="holder-3">  <h1>Content 3</h1> </div></body></html>'; 

alert($(html).filter("#holder-1").html());