2012-03-14 98 views
0

我遇到$ .get的問題,我以前從未有過,而且似乎無法修復它。當調用下面的函數:

function getDefinition (word) { 
var toget = "http://www.stands4.com/services/v1/defs.aspx?tokenid=TOKEN&word=" + word; 
jQuery.support.cors = true; 
$.get(toget, function (data) { 
    if(data.indexOf("<definition>") !== -1) 
    { 
     var definition = data.split("<definition>")[1].split("</definition>")[0]; 
     return definition; 
    } 
    else 
    { 
     return false; 
    } 
}); 

}

的Internet Explorer(我沒有測試它在其他瀏覽器)拋出

「SCRIPT438:對象不支持屬性或方法「的indexOf」 randomfunctions.js,第5行字符3" (第5行字符3將是 第 「i」 中的 「if」)

此前我得到一個CORS錯誤,所以我加了

jQuery.support.cors = true; 

line。我試圖提醒(數據),但同樣的事情發生。我正在使用jQuery 1.6.1。

任何幫助,將不勝感激, 馬修

+0

什麼是數據真的回到了,你試過調試這個JS來觀察,它看起來像一個數組數據或其他什麼 – 2012-03-14 03:57:28

+0

把'alert(data);返回;'作爲該函數的第一行應該告訴你它是什麼。我的猜測是'undefined' – bkconrad 2012-03-14 04:05:10

回答

2

做的第一件事是在.indexOf()調用之前在調試器中設置一個斷點,然後檢查data變量以查看它是否是您期望的以及是否具有該方法。由於我們不知道這些數據是什麼,這很難讓我們說,但顯然IE在這方面遇到了困難。

.indexOf()可以是一個字符串或數組的方法。陣列版本相對較新,一些較舊的瀏覽器(或時代瀏覽器)尚未支持它。如果data是一個數組,那可能是問題所在。如果是這種情況,那麼您可以用陣列中的手動搜索替換.indexOf(),或者爲.indexOf()添加ES5墊片。在mdn上有Array.indexOf()here的Shim實現。

它也看起來像你試圖從$.get()調用的成功處理程序返回你的數據。這是行不通的。成功函數由ajax引擎的內部調用。將數據返回給它什麼都不做 - 數據將被丟棄。

從AJAX的異步調用($.get()是默認設置),則無法從suucess處理程序,或從.get()調用返回的數據。數據僅在稍後發生的成功處理程序中可用。相反,您必須將任何使用該數據的代碼放入成功處理函數或從成功處理函數調用的函數調用中。這就是ajax調用必須工作的方式。你可以用它們做傳統的順序編程。

+0

這是如何解釋他所得到的錯誤? – Baz1nga 2012-03-14 04:04:20

+0

@ Baz1nga - 我也在.indexOf()問題上添加了信息。但是,一旦他過去了,其他代碼將不會工作,或者是因爲其他問題。 – jfriend00 2012-03-14 04:09:58

+0

即使我註釋掉所有if/else代碼並僅添加了警報(數據),問題仍然存在。但我發現這有點令人驚訝,因爲我之前一直在使用$ .get()。事實證明,問題是異步性的一半,實際上是以XML返回的一半,因此jQuery決定將它返回到某種奇怪的數組中:)只需添加jQuery.ajaxSetup({async:false});在$ .get之前,jQuery.ajaxSetup({async:true});在$ .get之後,並在請求的末尾添加一個額外的參數(,「html」)來修復異步問題並按照我的意願返回XML – MatthewSot 2012-03-18 19:05:21