2011-07-11 8 views
2

フル HTMLページを返す単純なAJAX呼び出しを作成しています。この応答から必要な値を取得しようとします。私はなぜそれが機能しないと私はおそらく考えることができるすべてをやったのか分からない。それはの場合、別のHTMLページの一部として私のコードを持っているが、Firefox拡張の一部ではなく、問題がある。私はFirefoxの拡張機能を書いている!Firefox拡張機能のAjaxレスポンスで何もできません

Firefoxの拡張機能で、私は応答を得て警告を発することができ、そこには応答テキストが表示されます。しかし私は.find.filterまたは何か本当に呼び出すことはできません。成功関数のある時点でコードが黙って壊れ、何も起こりません。ここで

私のコードです:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
<head> 
     <title>runthis</title> 

     <script type="text/javascript" language="javascript" src="jquery-1.6.2.js"></script> 

     <script type="text/javascript"> 
     $(document).ready(function(){ 
       $('input').click(function(){ 
       var makeTransferURL = "empty"; 
           var pc = "empty"; 

         $.ajax({//Transfer 
          type: "POST", 
          url: "http://localhost/transfer2.html", 
          data: "", 
          dataType: "html", 
          context: document.body, 
          success: function(response){ 
           var table = $(response).find('table.123RowSeparator'); 
           var a  = table.find('a[href*="123"]'); 
           var href = a.attr("href"); 
           makeTransferURL = href; 
           var link = makeTransferURL.indexOf('PC_'); 
           pc = makeTransferURL.substring(link, (link + 11)); 
           alert(pc); 
          }, 
          error: function() { 
           alert("Sorry, The requested property could not be found."); 
          } 
         }); 
       }); 
     }); 
     </script> 
</head> 
<body> 
     <input type="button" value="load" /> 
</body> 
</html> 

Firefoxの拡張機能のdoesntの仕事とまったく同じコード:

window.addEventListener("load", function() { myExtension.init(); }, false); 

var myExtension = { 
     init: function() { 
     gBrowser.addEventListener("DOMContentLoaded", myExtension.onPageLoad, true); 
    }, 
    onPageLoad: function(aEvent) { 
     var doc = aEvent.originalTarget; // doc is document that triggered "onload" event 

    if(doc.location.href=="http://localhost/index2.html") { 

     var makeTransferURL = "empty"; 
     var verifyTransferURL = "empty"; 
     var confirmTransferURL = "empty"; 
     var token1 = "empty"; 
     var token2 = "empty"; 
     var pc = "empty"; 

     $.ajax({//Transfer 
      type: "POST", 
      url: "http://localhost/transfer2.html", 
      data: "", 
      cache: false, 
      async: false, 
      dataType: "html", 
      context: document.body, 
      success: function(response){ 
       var table = $(response).find('table.123RowSeparator'); 
       var a  = table.find('a[href*="123"]'); 
       var href = a.attr("href"); 
       makeTransferURL = href; 
       var link = makeTransferURL.indexOf('PC_'); 
       pc = makeTransferURL.substring(link, (link + 11)); 
       alert(pc); 
      }, 
      error: function() { 
       alert("Sorry, The requested property could not be found."); 
      } 
     }); 
    } 
    aEvent.originalTarget.defaultView.addEventListener("unload", function(){ myExtension.onPageUnload(); }, true); 
    }, 
    onPageUnload: function(aEvent) {} 
} 

私はなぜを知っている必要があります!ここで

は、応答のHTTPヘッダーです:

HTTP/1.1 200 OK 
Date: Mon, 11 Jul 2011 10:43:32 GMT 
Server: Apache/2.2.19 (Win32) 
Last-Modified: Wed, 06 Jul 2011 12:41:47 GMT 
ETag: "9000000015529-f7b9-4a765ec7780ff" 
Accept-Ranges: bytes 
Content-Length: 63417 
Keep-Alive: timeout=5, max=97 
Connection: Keep-Alive 
Content-Type: text/html 
+0

!私は、ブラウザ/アドオンのさまざまな部分に複数の時間が含まれている場合、jQuery名前空間に問題があると思うが、どのメソッドが呼び出されているのか混乱している! – Amir

答えて

1

は、解決策を見つけたその優雅な(または正しい練習)ではないが、私は休憩を与えます!誰も答えていない:)

をここで私は仕事にこれを取得するためにやったことです:

$('#divid').css('display', 'none'); 
       response = response.replace(/<head>(?:.|\n|\r)+?<\/head>/ig, ""); 
       doc.getElementById('divid').innerHTML = response.replace(/<script[^>]*>[\S\s]*?<\/script[^>]*>/ig, ""); 
       var table = $('#divid').find('whateveryoufeellike'); 

だから私は、問題は、私はプレーンなHTMLフォーマットされた文字列を得ていたと私はjQueryの機能を使用することができなかったということだったと思います.findと.filterのような文字列のように。文字列を取得し、正規表現を使用して、頭とスクリプトタグからストライプ化し、私が作成したDivに残されたものをダンプしました。しかし、コードが表示されないようにdivを隠すように設定する前ではありません。ユーザーは本当に違いは感じられません。私は今、マザー・ページにDOMを使用して、すべての.findと.filtersを実行して、私の心が欲しいと思っています。

あなたがページ内で作ったDivの名前がそのページにユニークである限り、同じページ上の同じID /クラスのタグ間に衝突の問題はありません。だから、本当にランダムな何かが選ぶとよいでしょう:Dの提案、これは問題をより明確にすることができます場合は... HWSyujtewq $のy $のy $ワットの£tの "£%^ (&)%ます$ dsfdgjnbfdvsc

関連する問題