Member 11883599 Ответов: 2

Ajax вызов в ASP MVC не работает


Всем привет,

Я планирую получить идентификатор клиента из БД, передав имя клиента контроллеру с помощью Ajax. И назначьте CustomerId, чтобы сохранить их в БД с другим сообщением Ajax.
но это предупреждает об ошибке. Я не мог отладить. пожалуйста, помогите мне решить эту проблему.


//Save if valid
           if (isAllValid) {

               $(function () {
                       $.ajax({
                           url: '/Sale/getCustomerId',
                           type: "POST",
                           data: { input: $("[id*='Customer'] :selected").text() },
                           contentType: "application/json",
                           success: function (result) {
                               alert(result);
                           },
                           error: function () {
                               alert("error");
                           }
                       });
                       return false;
               });

               cusId = result;

               var data = {
                   AccntInvoiceNo: $('#AccountInvNo').val(),
                   SaleDate: $('#SaleDate').val(),
                   SubTotal: $('#SubTotal').val(),
                   Discount: $('#Discount').val(),
                   NetAmount: $('#NetTotal').val(),
                   CustomerId: result,
                   UserId: 1,
                   SaleType: $("[id*='Categories'] :selected").text(),
                   SaleDescs: orderItems
               }


               $(this).val('Please wait...');

               $.ajax({
                   url: '/Sale/SaveOrder',
                   type: "POST",
                   data: JSON.stringify(data),
                   dataType: "JSON",
                   contentType: "application/json",
                   success: function (d) {
                       //check is successfully save to database
                       if (d.status == true) {
                           //will send status from server side
                           alert('Successfully done.');
                           //clear form
                           orderItems = [];
                           $('#AccountInvNo').val('');
                           $('#saleDate').val('');
                           $('#orderItems').empty();
                           $('#SubTotal').val('');
                           $('#Discount').val('');
                           $('#NetTotal').val('');
                       }
                       else {
                           alert('Failed');
                       }
                       $('#submit').val('Save');
                   },
                   error: function (exception) {
                       alert('Exeption:' + exception);
                       $('#submit').val('Save');
                   }
               });
           }

       });


Класс контроллера продаж
public JsonResult getCustomerId(string CusName)
        {
            IQueryable CusID = from p in db.Persons where ((p.FName+p.LName) == CusName) select p.Id;
            return Json(CusID, JsonRequestBehavior.AllowGet );
        }


Файл конфигурации маршрута (people - это имя таблицы)
routes.MapRoute(
                "getCustomerId",
                "Sale/People/{name}",
                new { controller = "Sale", action = "getCustomerId" }
            );


Что я уже пробовал:

Я планирую получить идентификатор клиента из БД, передав имя клиента контроллеру с помощью Ajax. И назначьте CustomerId, чтобы сохранить их в БД с другим сообщением Ajax.
но это предупреждает об ошибке. Я не мог отладить. пожалуйста, помогите мне решить эту проблему.

InbarBarkai

В чем же ошибка?

Member 11883599

/Sale/getCustomerId от этого я не получаю значения, он выдает ошибку и показывает, что результат не определен

InbarBarkai

Вам не хватает элементарного понимания вызовов ajax.
Конечно, результат будет неопределенным. Вы не получите его, пока звонок не будет закончен. Это делается асинхронно.

Karthik_Mahalingam

попадает ли он в действие контроллера?

Member 11883599

Я проверил, поставив точку останова на контроллер, но она не попала, догадываетесь ?? Потому что я новичок в этом Аяксе

Karthik_Mahalingam

вставьте url-адрес в адресную строку и убедитесь, что он попал в действие

Member 11883599

да, я пробовал этот путь,
http://localhost:55664/Sale/getCustomerId?CusName=Kasun%20Sandaruwan
как только я удаляю тег [HttpPost], он попадает в контроллер, и значение CusName успешно проходит, но для CusId я получаю длинный запрос. не удостоверение. Но я уже проверил quering samething на SQLSever, он дает правильное значение.

Karthik_Mahalingam

затем удалите httpost

Karthik_Mahalingam

запустите этот текст в окне консоли chrome и проверьте значение
$("[id*= 'Customer']: selected"). text()

Member 11883599

Я тоже пробовал ваш путь, он дает эту ошибку
VM94:187 Uncaught DOMException: не удалось выполнить 'querySelector' на 'Document': '[id*= 'Customer']: selected' не является допустимым селектором.(...) CommandLineAPIImpl.$ @ VM94:187 (анонимная функция) @ VM121:1

Karthik_Mahalingam

означает, что селектор недействителен
проверка http://www.w3schools.com/jquery/jquery_ref_selectors.asp

Member 11883599

Я снова изменил код,
все выглядит нормально, но не получил значения от контроллера к вызову ajax, отдаю как неопределенное. Я только что попытался вернуть номер из контроллера в ajax-вызов, но все равно получает значение данных неопределенное. пожалуйста, попробуйте решить эту проблему,

Контроллер......

[HttpPost]
public JsonResult getCustomerId(string CusName)
{

результат ВАР = дБ.Люди.Где (x => x.FName == CusName).Выберите (x => x.Id).Distinct ().Вызова метода toList().Метода firstordefault();
return Json (результат);
}

Функция Ajax.....

функция getCusId(имя) {
$.Аякс({
url: '/ Sale/getCustomerId',
тип данных: "json",
тип: "пост",
contentType: 'application/json; charset=utf-8',
сведения: в формате JSON.преобразовать в строки({ CusName: имя }),
асинхронные: правда,
processData: false,
кэш: false,

успех: функция (данные) {
возвращать данные;
},
ошибка: функция (xhr) {
// alert ("ошибка");
возвращать null;
},
ошибка: функция (исключение) {
предупреждение('исключения:' + исключения);
}
})
}

улавливание возвращаемого значения....

var cusid = getCusId(имя);

2 Ответов

Рейтинг:
9

Member 11883599

Привет всем, наконец-то я нашел проблему. Я просто использовал Ajax-вызовы в функции и вызвал ее, но это не сработало. Поэтому я включил в выпадающий список метод изменения текста, и теперь он работает нормально. Вот полный код.

$("#Customer").change(function () {
            var name = $("[id*='Customer'] :selected").text();
            $.ajax({
                url: '/Sale/getCustomerId',
                datatype: "json",
                type: "POST",
                contentType: 'application/json; charset=utf-8',
                data: JSON.stringify({ CusName: name }),
                async: true,
                processData: false,
                cache: false,

                success: function (Data) {
                    cusid= Data;
                },
                error : function (xhr) {
                    //  alert("error");
                    return null;
                },
                error: function (exception) {
                   // alert('Exeption:' + exception);
                    swal("Ooops", 'Exeption:' + exception, "error");
                }
            })       
        })



public JsonResult getCustomerId(string CusName)
       {

           var result = db.People.Where(x => (x.FName+ " " + x.LName) == CusName).Select(x => x.Id).Distinct().ToList().FirstOrDefault();

           return Json (result);
       }


Рейтинг:
2

David_Wimbley

Итак, несколько вещей, которые нужно сделать/проверить.

Основываясь на ваших комментариях и вашем коде, я считаю, что ваш вопрос о том, почему он даже не попадает в контроллер, - это 2 вещи:

1) Вам не хватает глагола [HttpPost] над вашим действием контроллера.

[HttpPost]
public JsonResult getCustomerId(string CusName)
        {
            IQueryable CusID = from p in db.Persons where ((p.FName+p.LName) == CusName) select p.Id;
            return Json(CusID, JsonRequestBehavior.AllowGet );
        }


2) Ваш маршрут и действие используют другие имена переменных, чем ваш вызов ajax

Линия передачи данных текущих вызовов:

data: { input: $("[id*='Customer'] :selected").text() },


Ваше действие в контроллере использует CusName для параметра, но в вашем маршруте вы указываете его как имя. Ваша проблема здесь будет заключаться в том, что CusName будет пустым, поскольку привязка ищет привязку параметра CusName в вашем действии к элементу формы, который публикуется с именем CusName, но в вашем случае вы передаете его в качестве входных данных.

Вам нужно выбрать имя параметра и придерживаться его. Если это имя, CusName или input.

Поэтому в строке данных вашего ajax вызова измените ее на эту

data: { CusName: $("[id*='Customer'] :selected").text() },


Измените свой маршрут и на этот. Один пункт, который следует отметить здесь, даже если вы не используете маршрут в своем вызове ajax, если вы начнете использовать этот маршрут в своем ajax, я считаю, что он не будет работать так, как вы сейчас получили из-за использования третьего имени param, поэтому вам нужно изменить свой маршрут на этот:

routes.MapRoute(
                "getCustomerId",
                "Sale/People/{CusName}",
                new { controller = "Sale", action = "getCustomerId" }
            );


Member 11883599

Я попробовал то же самое, но получил ниже ошибок;
"Мастериндекс": 353 непойманные ReferenceError: результат не определен(анонимная функция) @ "Мастериндекс": 353dispatch @ на jQuery-2.2.3.ДШ:4737elemData.ручка @ на jQuery-2.2.3.ДШ:4549
jquery-2.2.3. js: 9203 POST http://localhost:55664/Sale/getCustomerId 500 (Внутренняя ошибка сервера)

David_Wimbley

Это потому, что ваш ajax-вызов работает асинхронно. Вы пытаетесь получить доступ к переменной result до того, как она получит значение.

Добавить ключевые слова async: false, чтобы ваш AJAX-вызов.


$.Аякс({
url: '/ Sale/getCustomerId',
тип: "пост",
асинхронные: ложные

Member 11883599

Я снова изменил код,
все выглядит нормально, но не получил значения от контроллера к вызову ajax, отдаю как неопределенное. Я только что попытался вернуть номер из контроллера в ajax-вызов, но все равно получает значение данных неопределенное. пожалуйста, попробуйте решить эту проблему,

Контроллер......

[HttpPost]
public JsonResult getCustomerId(string CusName)
{

результат ВАР = дБ.Люди.Где (x => x.FName == CusName).Выберите (x => x.Id).Distinct ().Вызова метода toList().Метода firstordefault();
return Json (результат);
}

Функция Ajax.....

функция getCusId(имя) {
$.Аякс({
url: '/ Sale/getCustomerId',
тип данных: "json",
тип: "пост",
contentType: 'application/json; charset=utf-8',
сведения: в формате JSON.преобразовать в строки({ CusName: имя }),
асинхронные: правда,
processData: false,
кэш: false,

успех: функция (данные) {
возвращать данные;
},
ошибка: функция (xhr) {
// alert ("ошибка");
возвращать null;
},
ошибка: функция (исключение) {
предупреждение('исключения:' + исключения);
}
})
}

улавливание возвращаемого значения....

var cusid = getCusId(имя);

David_Wimbley

Я сказал, Сделай асинхронного как ложные не так, в коде это значение true. Измените его на false

Member 11883599

Я пробовал то же самое, но проблема только в том, что отладчик выдает эту ошибку
Местный
cusid
:
не определено
данные
:
не определено
isAllValid
:
истинный
этот
:
вход# "отправить".БТН.БТН-успех