使用Remote的JQuery验证将空数据发布到webservice

时间:2010-04-18 16:46:29

标签: jquery json validation plugins

我正在使用JQuery Validation插件。我正在使用远程选项拨打我的网络服务来检查公司名称是否存在。 Web服务只接受JSON数据。

我将数据从我的表单中的公司输入字段传递到web服务,如下所示:

数据:“{'company':'”+ $('#Company')。val()+“'}”

但是这总是为公司返回一个空值,因此响应是{'company':''},即正确的JSON但是缺少公司输入字段值。

有人可以解释为什么我总是在这里得到一个空白值?

感谢您的帮助, 夏兰

3 个答案:

答案 0 :(得分:5)

原因是

data: "{'company': '" + $('#Company').val() + "'}"

在页面加载时不进行远程调用时进行评估。

尝试以这种方式声明规则:


remote: function() {  
    var r = {  
        url: "webservice.asmx",  
        type: "POST",  
        contentType: "application/json; charset=utf-8",  
        dataType: "json",  
        data: "{'company': '" + $('#Company').val() + "'}"  
        dataFilter: function(data) { return (JSON.parse(data)).d; }  
       }   
    return r;  
  }

如果您使用的是ASP.Net webservice,则需要使用dataFilter,因为响应将位于json对象的“d”属性中。需要JSON库。

"{ d: "true" }"

答案 1 :(得分:0)

试试这个:

data: {
    company: $('#Company').val(),
    param: 1  //Second paramenter
              //you can keep adding parameters folloiwng the format 
}

答案 2 :(得分:0)

尝试一下:

var query = [
        { "$lookup": {
            from: 'order_details',
            let: { order_id: "$_id" },
            pipeline: [
                { $match: { $expr: { $and: [{ $eq: [ "$order_id",  "$$order_id" ] }, { $eq: [ "$seller_id", ObjectID(seller_id) ] }] } } },
                { $project: {
                    amount: 1,
                    cod_charge: 1,
                    shipping_charge: 1,
                    pid: 1,
                    product_attribute_id: 1,
                    qty: 1
                } },
                { "$lookup": {
                    from: 'product',
                    let: { product_id: "$pid", product_attribute_id: '$product_attribute_id'},
                    pipeline: [
                        { $match: { $expr: { $eq: [ "$_id",  "$$product_id" ] } } },
                        { $project: { _id: 1, name: 1, sku: 1 } },
                        { "$lookup": {
                            from: 'product_image',
                            let: { product_attribute_id: '$$product_attribute_id' },
                            pipeline: [
                              { $match: { $expr: { $eq: [ "$product_attribute_id",  "$$product_attribute_id" ] } } },
                              { $project: { _id: 0, image: 1, is_default: 1 } },
                              { $sort : { is_default: -1 } },
                              { $replaceRoot: { newRoot: {_id: "$_id", image: "$image" } } }
                            ],
                            as: 'product_image'
                        } },
                        { $replaceRoot: { newRoot: {
                            _id: "$_id",
                            name: "$name",
                            sku: "$sku",
                            image: { $arrayElemAt: [ "$product_image.image", 0 ] }
                        } } }
                    ],
                    as: 'product'
                } },
                { "$replaceRoot": { newRoot: {
                    _id: '$$ROOT._id',
                    pid: '$$ROOT.pid',
                    amount: '$$ROOT.amount',
                    cod_charge: '$$ROOT.cod_charge',
                    shipping_charge: '$$ROOT.shipping_charge',
                    product_attribute_id: "$$ROOT.product_attribute_id",
                    qty: "$$ROOT.qty",
                    product: { $arrayElemAt: [ "$product", 0 ] },
                } } },
            ],
            as: 'order_details'
        } },
        { "$replaceRoot": {
            newRoot: {
                _id: "$_id",
                order_no: "$order_no",
                cust_id: "$cust_id",
                order_date: "$order_date",
                order_details: "$order_details"
            }
        } }
    ]

orderModel.order.aggregate(query, function(err, orderData){})

或更好的方法:

data: function() { return "{'company': '" + $('#Company').val() + "'}"; }

这对我有用