После успеха условие if все еще, если условие не работает в ajax success - PullRequest
0 голосов
/ 02 ноября 2018

Я знаю, что название несколько сложное для понимания. Но проблема только в этом. Позвольте мне объяснить вам подробно,

Я делаю, если условие в ajax success, сейчас я даю условие, что если данные не равны undefined, то эти данные хотят существовать.

Но у меня проблема в том, что если данные не равны неопределенным, все равно данные идут в условии 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) должно быть пустым.

Теперь для этого я использую условие if в ajax: если data.data.name не определено (data.data.name - это хранилище значений Material_PartNo @ (i)), то Material_PartNo @ (i) должно быть пустым, иначе покажите их значение.

Но я вижу, что data.data.name не определено (по предупреждению javascript), все еще показывая в нем неопределенное Material_PartNo @ (i) вместо пустого текстового поля.

1 Ответ

0 голосов
/ 03 ноября 2018

Согласно Обнаружение неопределенного свойства объекта , ваша проверка свойства объекта undefined кажется неправильной, поскольку вы проверяете строку "undefined" с оператором неравенства значений (!=), а не проверяете undefined как тип для неинициализированных объектов.

Попробуйте проверить состояние undefined с помощью typeof и оператора неравенства типов (!==), как в этом примере:

$.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 тип

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...