我一直试图在过去的几个小时内解决这个问题,并希望有人可以提供帮助。我在使用JQuery 1.6.4在单击按钮时进行ajax调用,并使用结果填充表的内容。代码在IE以外的所有浏览器中都能正常工作。当我在IE中运行它时,会填充一些值,其余的不是,非常奇怪!
当我运行脚本并使用IE的调试工具时,我收到以下错误;
对方法或属性访问的意外调用(第3行)
有谁知道我做错了什么?这是我运行ajax的代码;
$(document).ready(function(){
$("#find").click(function () {
//Set kinase
var kinaseEntry = $("#kinaseEntry").val();
var dataString = "kinaseEntry=" + kinaseEntry;
//Fetch list from database
$.ajax({
type : "GET",
url : "http://www.webaddress/php/post.php",
datatype: "json",
data: dataString,
success : function(datas) {
//SET VARIABLES TO BE USED THROUGHOUT PAGE
var kinaseName = (datas.skuName);
var molecularWeight = (datas.molecularWeight);
var kinaseConc = (datas.kinaseConc);
var anti1Name = (datas.antiName);
var anti2Name = (datas.antiName2);
var antiConc = (datas.antiConc);
var antiConc2 = (datas.antiConc2);
var tracerName = (datas.tracerName);
var tracerConc = (datas.tracerConc);
var tracerStockConc = (datas.tracerStockConc);
var tracerSku = (datas.tracerSku);
var kinaseSku = (datas.kinaseSku);
var antiSku = (datas.antiSku);
var antiSku2 = (datas.antiSku2);
var bufferName = (datas.bufferName);
var bufferSku = (datas.bufferSku);
//REAGENT NAMES
$(".kinaseName").html(kinaseName + " (" + molecularWeight + " kDa)");
$(".anti1Name").html(anti1Name);
$(".anti2Name").html(anti2Name);
$(".tracerName").html(tracerName);
$(".bufferName").html(bufferName);
//DEFAULT VALUES
$(".defaultKinaseConc").html(kinaseConc);
$(".defaultAntiConc").html(antiConc);
$(".defaultAnti2Conc").html(antiConc2);
$(".defaultTracerConc").html(tracerConc);
$("#molecularWeight").val(molecularWeight);
$("#tracerStockConc").val(tracerStockConc);
//INSERT DEFAULTS INTO INPUT
$("#userKinaseConc").val(kinaseConc);
$("#userAntibodyConc1").val(antiConc);
$("#userAntibodyConc2").val(antiConc2);
$("#userTracerConc").val(tracerConc);
},
error : function (XMLHttpRequest, textStatus, errorThrown) {
console.log("error :"+XMLHttpRequest.responseText);
}
});
return false;
}); });
名称填充正常,第一个默认值会被填充,但其余的则会中断。任何帮助将不胜感激。
以下是我的console.log();
的结果antiConc
"2"
antiConc2
"2"
antiName
"Biotin-anti-His"
antiName2
"Eu-Streptavidin"
antiSku
"PV6089"
antiSku2
"PV5899"
bufferName
"Kinase Buffer A"
bufferSku
"PV3189"
cleanSKU
null
kinaseConc
"5"
kinaseSku
"P3049"
molecularWeight
"125.4"
skuName
"ABL1"
tracerConc
"100"
tracerName
"Kinase Tracer 1710"
tracerSku
"PV6088"
tracerStockConc
"25"
答案 0 :(得分:0)
你确定它在其他浏览器中正常 ,或者它们只是没有明显破坏。
我猜你在这里发生了混合更新(从val()和html()使用的推断)。我注意到一种模式,其中由id(例如,#userKinaseConc)检索的元素和由类检索的元素(例如,.kinaseName)分别使用val()和html()。但是,#defineAntiCon打破了这种模式。你正在为这个元素使用html()。此元素是输入还是其他表单字段?这应该是val()?
通过html()setter而不是val()尝试将值应用于输入字段,您描述的体验可以是re-created,但它仍然不适用于该特定字段所有的值... IE以外的浏览器只是失败了,错误变得不破。在IE中,它将破坏执行。 #defAntiCon是否实际上是根据其他浏览器返回的数据填充的?
答案 1 :(得分:0)
IE8严格关于HTML插入。如果您的标记无效,或者具有HTML5特定标记,则会引发错误。
我没有真正的解决方案,但我会按照这些步骤使其有效。
datas
包含有效的HTML,确保没有额外的结束标记或语法错误(如果需要,您可以使用validator).val()
代替.html()
.html(datas.foo)
替换为.text(datas.foo)
,因为您要将字符串传递给方法。catch
方法中添加resolveWith
块(参考您的评论):替换这个:
resolveWith: function ( context, args ) {
if ( !cancelled && !fired && !firing ) {
// make sure args are available (#8421)
args = args || []; firing = 1;
try {
while ( callbacks[ 0 ] ) { callbacks.shift().apply( context, args ); }
} finally {
fired = [ context, args ];
firing = 0;
}
}
return this ;
},
用这个:
resolveWith: function ( context, args ) {
if ( !cancelled && !fired && !firing ) {
// make sure args are available (#8421)
args = args || []; firing = 1;
try {
while ( callbacks[ 0 ] ) { callbacks.shift().apply( context, args ); }
} catch (err) {
} finally {
fired = [ context, args ];
firing = 0;
}
}
return this ;
},
中的try-finally
上的错误
希望这有帮助。
修改正如@Josh在评论中提到的那样,has been reported错误并在this commit中解决了 jQuery 1.7.x 。您的jQuery的简单更新应该有效。