我的 Select2 在 3.5 上工作正常..
自从升级到 v4.0(不是“完整” - 并根据需要更改关键字/函数)以来,我遇到了一个奇怪的问题,即进行了额外的 AJAX 调用。但是,URL 未定义,因此它们会生成 404 Not Found 错误。URL 是https://localhost:8443/myapp/undefined
它们似乎与存在的 templateResult 和 templateSelection 有关。如果我将它们注释掉,则 select2 可以正常工作(但我的数据未格式化)。
由于它们没有被注释掉,我在初始化时得到了一次神秘/未定义的 AJAX 调用,然后当我单击选择框时进行一次调用,然后为我输入的每个字符调用一次(即使我设置了minimumInputLength)。然而,即使使用这些虚假的 AJAX 调用,我的“真实”ajax 调用也会触发并返回结果(这些结果由 templateResult/templateSelection 正确格式化。我尝试过使用和不使用“escapeMarkup”,行为上没有差异。
是什么触发了这些不良 AJAX 调用?我该如何阻止它们?(因为否则,它工作得很好)
提前致谢!
编辑 这里是演示该问题的完整页面。额外的网络调用是由我在 formatResult 函数中使用的标签生成的。但是为什么它应该处于“加载”状态时却返回 html 呢?
好吧,事实证明,设置“占位符”会导致加载变量未被设置,从而返回 html(带有格式错误的标签)
因此,如果设置了占位符,则 templateResult 和 templateSelection 还应该检查空 id。
if (result.id == "" || result.loading) return result.text;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" /> …Run Code Online (Sandbox Code Playgroud)