2013-01-18 101 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());