我遇到了以前从未遇到的$ .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行将是 “if”中的“i”)
之前我收到了CORS错误,所以我添加了
jQuery.support.cors = true;
线。我试图提醒(数据),但同样的事情发生了。我正在使用jQuery 1.6.1。
任何帮助将不胜感激, 马修
答案 0 :(得分:2)
要做的第一件事是在.indexOf()
调用之前在调试器中设置断点,并检查data
变量以查看它是否是您所期望的以及是否具有该方法或不。由于我们不知道那些数据是什么,我们很难说,但显然IE在这方面有困难。
.indexOf()
可以是字符串或数组的方法。阵列版本相对较新,一些较旧的浏览器(或浏览器时代之后)尚不支持它。如果data
是一个数组,那可能就是问题所在。如果是这种情况,那么您可以通过数组手动搜索替换.indexOf()
,或者为.indexOf()
添加ES5垫片。在mdn。
您还试图从$.get()
调用的成功处理程序返回数据。这不起作用。成功函数由ajax引擎的内部调用。将数据返回给它什么都不做 - 数据将被删除。
从异步ajax调用(默认为$.get()
),您无法从该suucess处理程序或.get()
调用返回数据。数据仅在稍后发生的成功处理程序中可用。相反,您必须在成功处理程序或从成功处理程序调用的函数调用中放置使用该数据的任何代码。这就是asynch ajax调用必须如何工作的方式。您可以使用它们进行传统的顺序编程。
答案 1 :(得分:1)
如果您使用的是旧版IE,则可能不支持indexOf:
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf