2011-07-11 37 views
2

我在写一个简单的AJAX调用,返回一个完整的 HTML页面,然后尝试从此响应中获取一些我需要的值。我不知道为什么它不工作,我已经尽了我所能想到的一切。它工程当我有我的代码作为另一个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扩展不工作:

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作为母版页并运行所有.finds和.filters我的心脏愿望!

它的美妙之处在于,只要您在页面中创建的Div的名称对于该页面是唯一的,就不会在同一页面上具有相同ID /类的标记之间发生任何碰撞问题。因此,一些真正随机的将是一个不错的选择:d建议... HWSyujtewq $ Y $ Y $ W£T“£%^ (&)%$ dsfdgjnbfdvsc