新网络 大佬有话说 : 2020-3-24 17:29:06
js折腾头要炸了
本帖最后由 新网络 于 2020-3-24 17:38 编辑
for (i = 0; i < $(".newBarcode").length; i++) {
var bc = $(".newBarcode").value;
var ii = $("input.newBarcode").id.replace(/[^0-9]/ig,"");
var regString = /+/;
if (!regString.test(bc)) {
$.getJSON("http://192.168.0.240/location.php?barcode=" + bc,function(data){
if (!data.location) {
console.log(ii);
if ($("#prodInfoName" + ii).style.length < 2) {
$("#prodInfoName" + ii).css(‘color’,’red’).css(‘font-weight’,’bold’);
}
}
});
}
}
如果去掉for命令 是没问题 可以执行
但是加入for命令console.log(ii); 输出都为$(".newBarcode").length -1 的值
到底哪里问题
如果是console.log(ii) 放到getJSON之前是可以输出每个 ii 值说来 这个又是没问题到底是哪里出问了
x1184 大佬有话说 : 2020-3-24 17:31:17
作用域问题吧 试下for (let i = 0; i < $(".newBarcode").length; i++)
u2u 大佬有话说 : 2020-3-24 17:38:26
本帖最后由 u2u 于 2020-3-24 17:39 编辑
因为getJSON是异步的,换句话说,就是他有可能会在你整个for执行完毕后再慢悠悠的进行网络连接,执行里面的内容。所有你需要改成同步执行,把你的代码放到下面这两行之间就行。
$.ajaxSettings.async = false;
……..
$.ajaxSettings.async = true;
逸笙 大佬有话说 : 2020-3-24 17:40:39
异步问题
for 它不等你 get 某个url的,它自己for 完了,值已经是lenth-1了,
然后你第一个barcode才收到了,于是console.log出来的,就是lenth-1。
x1184 大佬有话说 : 2020-3-24 17:42:31
u2u 大佬有话说 : 2020-3-24 17:38
因为getJSON是异步的,换句话说,就是他有可能会在你整个for执行完毕后再慢悠悠的进行网络连接,执行里面的 …
看了下确实异步问题 但强制改同步感觉对性能很影响yc003t
ghs9262 大佬有话说 : 2020-3-24 17:45:08
。。$.getJSON 是异步ajax 你可以把ii作为参数放进ajax函数 然后用回调的时候用 this.参数名 取出来
新网络 大佬有话说 : 2020-3-24 17:45:38
u2u 大佬有话说 : 2020-3-24 17:38
因为getJSON是异步的,换句话说,就是他有可能会在你整个for执行完毕后再慢悠悠的进行网络连接,执行里面的 …
原来是这样,谢谢大佬
逸笙 大佬有话说 : 2020-3-24 17:45:57
那我来说个菜鸟的解决方案:
for (i) {
bc=xxxxx;
ii=xxxxx;
if (xxxx) barcode(bc, ii);
}
function barcode(a, b)
{
getJSON(xxxxxxx);
xxxxxxxxxxxx
}