成功之后,if条件仍然if条件不能在ajax中成功运行

时间:2018-11-02 18:18:27

标签: javascript ajax asp.net-mvc

我知道标题的理解有些复杂。但是问题仅仅是这样。让我详细解释一下,

我正在做ajax成功的条件,现在正在做条件,如果数据不等于未定义,那么该数据要存在。

但是我遇到的问题是,如果数据不等于未定义的静止数据,则在if条件下进行。

让代码更清晰

这是视图

<input type="text" id="Material_PartNo@(i)" data-provide="typeahead" class="typeahead search-query form-control autocomplete" placeholder="PartNo"
onblur="ShowPartNoData(this.value, @(i))" />

<input type="text" class="form-control typeahead search-query autocomplete" id="Material_Description@(i)" data-provide="typeahead" 
placeholder="Enter The Product" onblur="ShowProductData(this.value, @(i), Material_PartNo@(i).value)" />

function ShowProductData(Product, id, partno) {        
    $.ajax({
        url: "/ServiceJob/ShowProductData",
        method: "POST",
        data: { 'product': Product, 'partno': partno },
        dataType: "json",
        success: function (data) {
            if (data.data.name != "undefined");
            {
                alert(data.data.pid != "undefined");
                document.getElementById("Material_PartID" + id).value = data.data.pid,
                document.getElementById("Material_PartNo" + id).value = data.data.name,                    
                document.getElementById("Material_Amount" + id).value = data.data.sellprice,
                document.getElementById("Material_Qty" + id).value = 1,
                document.getElementById("hdn_Material_Amount" + id).value = data.data.sellprice                 
            }
        }
    });
}

现在,这是控制器代码

[HttpPost]
public IActionResult ShowProductData(string product, string partno)
{
    var productID = _Db.Category.Where(x => x.Name == product).FirstOrDefault();
    if (productID != null)
    {
        if (partno == null)
        {
            var productDataResult = (from fm in _Db.Purchase
                          join s in _Db.Part on fm.PartId equals s.Id
                          where fm.CategoryId == productID.Id //&& s.Name == partno
                          select new
                          {
                              pid = s.Id,
                              sellprice = fm.sellprice,
                              Name = s.Name
                          }).FirstOrDefault();
            return Json(new { data = productDataResult });
        }
        else
        {
            var productDataResult = (from fm in _Db.Purchase
                          join s in _Db.Part on fm.PartId equals s.Id
                          where fm.CategoryId == productID.Id && s.Name == partno
                          select new
                          {
                              pid = s.Id,
                              sellprice = fm.sellprice,
                              Name = s.Name
                          }).FirstOrDefault();
            return Json(new { data = productDataResult });
        }
    }
    else
    {
        return Json(new { data = false });
    }
}

现在按照代码,有两个名为 Material_PartNo @(i) Material_Description @(i)的文本框。无论我在 Material_Description @(i)中写什么,相关产品都会在另一个名为 Material_PartNo @(i)的文本框中显示。如果没有任何产品,则 Material_PartNo @(i)应该为空白。

为此,我现在使用ajax中的if条件,如果未定义 data.data.name (data.data.name是Material_PartNo @(i)的值存储),则 Material_PartNo @(i)应该为空白,否则请显示其值。

但是我看到 data.data.name 是未定义的(通过JavaScript警报)仍在其中显示了未定义的 Material_PartNo @(i)文本框,而不是空白。 / p>

1 个答案:

答案 0 :(得分:1)

根据Detecting an undefined object property,您的undefined对象属性检查似乎是错误的,因为您正在使用值不等于运算符("undefined")来检查字符串!=,而不是检查undefined作为未初始化对象的类型。

尝试使用typeof检查undefined状态,然后输入不等式运算符(!==),如下例所示:

$.ajax({
    url: "/ServiceJob/ShowProductData",
    method: "POST", // or use type: 'POST'
    data: { 'product': Product, 'partno': partno },
    dataType: "json",
    success: function (data) {
        if (typeof data.data.name !== "undefined")
        {
            alert(typeof data.data.pid !== "undefined");
            $('#Material_PartID' + id).val(data.data.pid);
            $('#Material_PartNo' + id).val(data.data.name);

            // other stuff                 
        }
        else
        {
            // set empty textboxes here
            $('#Material_PartID' + id).val('');
            $('#Material_PartNo' + id).val('');
        }
    }
});

注意:

您当前的if条件在if (data.data.name != "undefined");中有另外的分号,这可能成为if条件不能按预期运行的另一个原因。

参考:undefined type