【问题标题】:Dynamically get URL for JQuery Ajax request from Data Attribute从数据属性动态获取 JQuery Ajax 请求的 URL
【发布时间】:2013-10-03 22:46:34
【问题描述】:

我有一个 JQuery 自动完成功能,我需要能够将 URL 传递到该功能。我正在尝试从 html data-url 属性中提取 url,但是我目前在 JavaScript 控制台中收到一个 variable is undefined 消息,所以我知道我没有得到我期望的值。我在下面包含了我的代码。任何帮助将不胜感激。

JQuery 函数:

 $(function () {
    $(".autocomplete").autocomplete({
        delay: 0,
        source: function (request, response) {
            var baseURL = $(this).data("url");
            $.ajax({
                type: "GET",
                contentType: "application/json; charset=utf-8",
                url: baseURL + request.term,
                dataType: "json",
                success: function (data) {
                    response(data)
                }
            });
        },
        minLength: 1,
    });

HTML 元素:

<td style="width: 90%">
   <label for="tag_Name" class="inline">Server Tags: </label>
      <input class="fixed autocomplete" type="text" id="tag_Name" placeholder="Type tags to add..." data-url="/RequestFieldValues/GetLikeResourceTags/?prefix=" />
</td>

【问题讨论】:

    标签: javascript jquery html ajax jquery-autocomplete


    【解决方案1】:

    试试这个...

    $(function () {
        $(".autocomplete").each(function() {
            var baseURL = $(this).data("url");
            $(this).autocomplete({
                delay: 0,
                source: function (request, response) {
                    $.ajax({
                        type: "GET",
                        contentType: "application/json; charset=utf-8",
                        url: baseURL + request.term,
                        dataType: "json",
                        success: function (data) {
                            response(data)
                        }
                    });
                },
                minLength: 1,
            });
        });
    });
    

    我已将.autocomplete() 放在each() 函数中,因此您可以参考this 从数据属性中获取基本网址。然后,您可以将其传递给 source 函数。

    顺便说一下,如果有超过 1 个输入,那么您需要让每个输入都有一个唯一的 ID。你不应该有具有相同 ID 的元素 :)

    【讨论】:

    • 即使有引号,仍然出现未定义。
    • 试试看,让我们知道你的进展。
    【解决方案2】:

    在 ajax 请求中更改 URL 的另一种方法

    $.ajax({
      url: "http://static.url/",
      beforeSend: function (xhr) {
        this.url = "http://dyn.url/" + "here"
      }
    });
    

    【讨论】:

      【解决方案3】:

      我认为你应该做的是:

       $(function () {
      var baseURL = $(".autocomplete").data('url');
          $(".autocomplete").autocomplete({
              delay: 0,
              source: function (request, response) {
                  $.ajax({
                      type: "GET",
                      contentType: "application/json; charset=utf-8",
                      url: baseURL + request.term,
                      dataType: "json",
                      success: function (data) {
                          response(data)
                      }
                  });
              },
              minLength: 1,
          });
      

      【讨论】:

      • “.autocomplete”类的元素不止一个,所以我认为也不会起作用。我需要从发出请求的 .autocomplete 类中获取 URL,这就是我尝试使用 $(this) 引用的原因
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多