2012-01-31 84 views
0

首先,我使用jQuery的$ .ajax函數獲取HTML。爲什麼沒有字符串傳遞到函數 - jQuery

在成功函數中,我提醒它(這個工作正常,並按預期顯示一個HTML字符串);

然後我把它作爲變量傳遞給另一個函數processHTML。但它不工作,並說該變量爲空。我用警報證實了這一點。

var my = my || {}; 

jQuery(function ($) { 
    my.html = { 
    getHTML: function(url) { 
     $.ajax({ 
     url: url, 
     dataType: "html", 
     success: function(myHTML) { 
      alert(myHTML); // shows string, as expected 
      my.html.processHTML(myHTML); //returns null 
     } 
     }); 
    }, 

    processHTML: function (myHTML) { 
     alert(myHTML); 
     // do stuff and return myHTML 
    } 

    } // end of my.html object 
}); // end of jQuery wrapper function 

爲什麼不是從成功回調傳遞到processHTML函數的字符串?如果我將成功回調中的myHTML替換爲實際字符串(<div>test</div>),它將成功傳遞到函數中。


更新:下面是實際的代碼,如要求。點擊鏈接onclick="hey.mydoc.ajax2({source: 'http://www.mysite.com/mypage'})"進行調用。這也在JSFiddle上,但當點擊鏈接時,我得到ReferenceError: Can't find variable: hey,這不會發生在我的網站上。

var hey = hey || {}; 

jQuery(function ($) { 

hey.mydoc = { 

     ////////////////////////////////////////////////////// 
     ////////////////////////////////////////////////////// 
     ////////////////////////////////////////////////////// 
     getHTML: function (source) { 

        $.ajax({ 
         url: source, 
         dataType: "html", 
         beforeSend: function(){ 
         }, 
         success: function(myHTML) { 
         alert('myHTML is '+myHTML); 
         hey.mydoc.processHTML(myHTML); 
         } // end of success function 
        }); 
     }, // end of method 


     ////////////////////////////////////////////////////// 
     ////////////////////////////////////////////////////// 
     processHTML: function (myHTML) { 

     alert ('processHTML - ' + myHTML); 
      myHTML = $(myHTML); 
      myHTML.find('script').remove(); 
      // and a bunch of other DOM manipulations... 

      var content = "<!DOCTYPE html><html>" + myHTML.html() + "</html>"; 
      return content; 
     }, // end of method 


    ////////////////////////////////////////////////////// 
    ////////////////////////////////////////////////////// 
    ajax2: function (options){ 


     $.ajax({ 
        url: options.content, 
        dataType: "html", 
        success: function(myHTML) { 
        alert('myHTML is '+myHTML); // myHTML is string of html, as expected 
        var newHTML = hey.mydoc.processHTML(myHTML); // myHTML not getting passed in 
        alert(newHTML); 

        } // end of success function 
       }); 
     } // end of method 
    } // end of hey.mydoc namespace 


}); //end of jQuery wrapper 
+0

請張貼給您麻煩的實際代碼。這看起來像是一個削減我的例子。 – 2012-01-31 20:34:00

+0

這是你的實際代碼? 'var getHTML:function(url)'將立即失敗,並帶有'Unexpected token:'錯誤。 – ShankarSangoli 2012-01-31 20:34:35

+0

這是您確切的JavaScript代碼或您複製粘貼的部分嗎?語法看起來很奇怪,因爲它使用':'和'='來定義函數。你在控制檯中是否收到錯誤信息? – 2012-01-31 20:35:07

回答

-1

試試這個 - 在processHTML後面加上'='(等號)並放一個冒號。

+0

這是不正確的。變量賦值需要'=',而不是':'。 – 2012-01-31 20:35:56

+0

變量getHTML正在分配一個冒號。 – PhillipKregg 2012-01-31 20:38:21

+0

只爲':'參考:http://stackoverflow.com/questions/418799/what-does-do-in-javascript – summea 2012-01-31 20:39:05

0

嘗試這樣的:

function processHTML(myHTML) { 
    alert(myHTML); 
    // do stuff and return myHTML 
} 
+0

錯誤/不一致的函數定義是來自壓縮代碼的拼寫錯誤。如果您有任何想法,我現在已經發布了完整的代碼和上面的jsfiddle。 – supertrue 2012-01-31 21:41:21

0

不需要傳遞參數。

​​3210
相關問題