dcat-admin icon indicating copy to clipboard operation
dcat-admin copied to clipboard

关于form表单select选项用ajax加载报错

Open zhengzhishanliang opened this issue 4 years ago • 5 comments

  • Laravel Version: 7.30
  • PHP Version: 7.3
  • Dcat Admin Version: beta2.0.20

Description:

在form表单输入框值查询时,会查询多次,并报错 image image

Steps To Reproduce:

其余无改动,就是个ajax获取对应值。可传参调用了多次,且参数存在拼音情况

zhengzhishanliang avatar Mar 15 '21 14:03 zhengzhishanliang

你的接口报错了,检查接口

jqhph avatar Mar 16 '21 01:03 jqhph

接口报错,是因为传递了错误参数。我用拼音输入法输入“电脑”,他的请求参数会传递diann,diannao等字符串参数,所以导致接口报错。正常不应该传递“电脑”这个字符串参数去请求吗?我猜想是因为您前端的js事件,如果是,那这里是不是可以修改触发事件,以最后输入值为准。不然会产生大量错误的请求。谢谢

zhengzhishanliang avatar Mar 16 '21 01:03 zhengzhishanliang

可能是select2新版本的问题

jqhph avatar Mar 16 '21 01:03 jqhph

是的,现在的 2.0 版本确实存在这个问题

hiccup711 avatar Jun 02 '21 01:06 hiccup711

可能是select2新版本的问题

问题说明:我这边阅读了一下源码,这个问题应该是由于select2插件delay延迟参数不生效导致的,默认系统设置250毫秒的延迟,但是只要搜索内容有任何变化,马上就会请求接口。当使用搜索功能时,中文还没有输入完成,但是select2已经将输入中的英文字符提交过去了。在多次触发接口的时候,select2会判断前面接口是否请求完成,如果没有请求完成会通过abort终止请求。触发终止请求时,Dcat的ajaxSetup全局设置,会触发error事件,调用vendor\dcat\laravel-admin\resources\assets\dcat\js\extensions\Ajax.js文件第62行的handleAjaxError方法,handleAjaxError方法中没有考虑到abort终止请求的情况,所以一直会执行到97行,抛出0 abort错误。 image image

解决方案:vendor\dcat\laravel-admin\resources\assets\dcat\js\extensions\Ajax.js文件handleAjaxError方法里,switch里增加xhr.status等于0时,直接return即可。

Weliam-xin avatar Jun 02 '21 11:06 Weliam-xin