【问题标题】:Passing parameters to Ajax request in Select2在 Select2 中将参数传递给 Ajax 请求
【发布时间】:2015-01-11 18:52:21
【问题描述】:

我有这个功能:

function tagsInputFabricantes(data) {
    console.log(data);
    var fabricante_distribuidor_id = data.ent.id,
        producto_solicitud_id = data.ent.idProductoSolicitud,
        fabricante_producto_solicitud_id = data.ent.idFabricanteProductoSolicitud;

    $('#tagsInputFab-' + data.ent.idFabricanteProductoSolicitud).select2({
        placeholder: 'Seleccione uno o más países',
        closeOnSelect: false,
        multiple: true,
        width: '100%',
        ajax: {
            dataType: 'json',
            cache: true,
            quietMillis: 2000, // waits 2 seconds before triggers the search
            url: function () {
                return Routing.generate('obtenerPaisesNoAgregadosFabricante');
            },
            data: function (pais, fabricante_distribuidor_id, producto_solicitud_id, fabricante_producto_solicitud_id) {
                return {
                    filtro: pais,
                    fabricante_distribuidor_id: fabricante_distribuidor_id,
                    producto_solicitud_id: producto_solicitud_id,
                    fabricante_producto_solicitud_id: fabricante_producto_solicitud_id
                }
            },
            results: function (data) {
                return {
                    results: data.entities
                };
            }
        },
        formatAjaxError: function () {
            return Translator.trans('mensajes.msgNoConexionServidor', {}, 'AppBundle');
        }
    });
}

我需要将三个额外的参数传递给要通过 REQUEST 发送的 Ajax 查询,这就是我正在做的事情:

    console.log(data); // watch wath is getting in this object

    // Gets the values and assign to vars
    var fabricante_distribuidor_id = data.ent.id,
        producto_solicitud_id = data.ent.idProductoSolicitud,
        fabricante_producto_solicitud_id = data.ent.idFabricanteProductoSolicitud;

     ....
     // Pass needed parameters as extra parameters for data 
     data: function (pais, fabricante_distribuidor_id, producto_solicitud_id, fabricante_producto_solicitud_id) {
                return {
                    filtro: pais,
                    fabricante_distribuidor_id: fabricante_distribuidor_id,
                    producto_solicitud_id: producto_solicitud_id,
                    fabricante_producto_solicitud_id: fabricante_producto_solicitud_id
                }
      }

但它不起作用,因为 URL 只包含这个:url&filtro=&fabricante_distribuidor_id=1&producto_solicitud_id=&fabricante_producto_solicitud_id=,这是错误的。 console.log() 将此记录到控制台:

Object {success: true, ent: Object}
     ent: Object
         id: 1
         idFabricanteProductoSolicitud: 18
         idProductoSolicitud: 18
         nombre: "Dist1"
         pais: ""
     __proto__: ...

错误在哪里?为什么不将参数传递给data 函数?我做错了什么?

【问题讨论】:

  • 给ajax加一个参数:dataType: 'script'
  • @surajck 为什么要从json 更改为script?这种变化的目的是什么?
  • 我不知道为什么你的data 属性是一个函数。它可以是纯文本、JSON、XML 等。不是函数。在 ajax 调用之外创建 JSON 并将其作为 data
  • @surajck 这是一个 JSON,注意括号 { ... }
  • @surajck 看来您对该插件并不熟悉。你为什么说 data 不应该在文档清楚地显示它的时候起作用

标签: javascript jquery ajax jquery-select2


【解决方案1】:

问题在于您正在定义需要作为函数参数发送的查询参数。因为没有通过函数参数传入,所以变量被设置为false,而不是采用全局设置的值。

data: function (pais, fabricante_distribuidor_id, producto_solicitud_id, fabricante_producto_solicitud_id) {
    // parameters 2, 3, and 4 are `undefined`

    return {
        filtro: pais,
        fabricante_distribuidor_id: fabricante_distribuidor_id,
        producto_solicitud_id: producto_solicitud_id,
        fabricante_producto_solicitud_id: fabricante_producto_solicitud_id
    }
}

现在,如果您删除这些参数,它们应该具有下一个作用域的值。这是您从传入数据设置它们的地方,这看起来就是您的目标。

data: function (pais) {
    return {
        filtro: pais,
        fabricante_distribuidor_id: fabricante_distribuidor_id,
        producto_solicitud_id: producto_solicitud_id,
        fabricante_producto_solicitud_id: fabricante_producto_solicitud_id
    }
}

这应该会为您提供您正在寻找的内容,即所有要传递到 url 中的 id。

【讨论】:

  • 如你所说,我收到此错误:Uncaught TypeError: Cannot read property 'length' of undefined
  • @ReynierPM 这听起来与这个问题无关(获取查询参数)。作为一个不同的问题可能会更好。
  • 是的,但是由于 original 问题还没有解决,我为什么要开一个新问题?最好在这里回答,不是吗?
  • @ReynierPM data 函数仍然没有填写 url 参数,还是我从原始问题中遗漏了什么?我只是说作为一个不同的问题可能会更好,因为 我没有更改任何内容 调用/删除/添加 length 属性。
猜你喜欢
  • 2012-11-18
  • 2012-10-19
  • 1970-01-01
  • 2012-02-12
  • 1970-01-01
  • 2016-04-01
  • 2012-01-13
  • 1970-01-01
  • 2016-08-01
相关资源
最近更新 更多