asp.net AJAX返回undefined,失败

yrdbyhpb  于 12个月前  发布在  .NET
关注(0)|答案(1)|浏览(129)

我试图使用AJAX请求的成功和失败块。我的功能正在工作,我可以很容易地直接到控制器,并使用我的查询来修改我的SQL数据库,例如。一切都在工作,这就是我之前没有注意到AJAX响应的原因。
正如我所说的,我可以做我的操作没有问题,但我的AJAX总是返回失败,即使我的行动是工作。我不明白的修复方法,你能看看,请?

错误

一开始我试着记录下

console.log('Question sending failed:', result.message);

字符串
问题发送ProductDetail?productId=7:2879失败:未定义
然后我试着把这个

console.log('the entire result: ', result);


整个ProductDetail?productId=7:2880结果:true
如果我同时记录它们,结果就是这样
整个ProductDetail?productId=7:2880结果:true
你可以看到代码的变化

行动

[HttpPost]
[Authorize]
public async Task<IActionResult> SendEmployeeQuestion(SetEmployeeQuestionQuery request)
{
    var result = await MediatrSend(request);
    return Json(result);
}

返回


的数据
也为“true”表示“return Json(Result)”

查询

public class SetEmployeeQuestionQuery : IRequest<bool>
    {
        public ClaimModel ClaimModel { get; set; }
        public int ProductId { get; set; }
        public int FirmId { get; set; }
        public string QuestionText { get; set; }
    }

    public class SetEmployeeQuestionQueryHandler : IRequestHandler<SetEmployeeQuestionQuery, bool>
    {
        private readonly IECommerceProductRepository _eCommerceProductRepository;
        public SetEmployeeQuestionQueryHandler(IECommerceProductRepository eCommerceProductRepository)
        {
            _eCommerceProductRepository = eCommerceProductRepository;
        }
        public async Task<bool> Handle(SetEmployeeQuestionQuery request, CancellationToken cancellationToken)
        {
            DateTime currentDateTime = DateTime.Now;
            string formattedTimestamp = currentDateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");

            var questionId = _eCommerceProductRepository.InsertToEmployeeQuestion(request.ClaimModel.EmployeeId, formattedTimestamp).Result;

            await _eCommerceProductRepository.InsertToAnswerLog(null, questionId, request.FirmId, request.QuestionText, null);

            return true;
        }
    }

脚本

// Ask to seller modal
        $(document).ready(function () {
            $('.ask-button').on('click', function () {
                $('#askToSellerModal').modal('show');
            });

            $('#askToSellerModal').on('hidden.bs.modal', function () {
                clearTextarea();
            });

            $('#sendQuestionButton').on('click', function () {
                var productId = "@Model.ProductData.Id";
                var firmId = "@Model.ProductData.FirmId";
                var questionText = $('#askToSellerTextArea').val();

                $.ajax({
                    type: 'POST',
                    url: '@Url.Action("SendEmployeeQuestion")',
                    data: {
                        ProductId: productId,
                        FirmId: firmId,
                        QuestionText: questionText
                    },
                    success: function (result) {
                    if (result.success) {                           
                        console.log('Question sent successfully:', result.message);
                        console.log('the entire result: ', result);
                    } else {
                        console.log('Question sending failed:', result.message);
                        console.log('the entire result: ', result);
                    }
                },
                    error: function (error) {                       
                        console.error('AJAX error:', error.statusText);
                    }
                });

                clearTextarea();
                $('#askToSellerModal').modal('hide');
            });
        });

        function clearTextarea() {
            document.getElementById('askToSellerTextArea').value = '';
        }

9jyewag0

9jyewag01#

这可能是因为在你的async Task<IActionResult> SendEmployeeQuestion中,你返回了一个结果,但你没有设置状态和消息,这样你就可以在你的AJAX响应中处理它。你没有向你的响应传递消息。因此,你需要稍微改变一下你的函数才能以这种方式使用。
我在你的HttpPost函数中放置了一个try catch异常块,这样你就可以在请求失败时处理错误。这意味着它将进入你的AJAX的错误块。
因为你没有提到你的MediatrSend函数是做什么的,我假设它发回一个HttpStatusCode

public class BaseResponse
    {
       public bool status { get; set; }
       public string message { get; set; }
   }

     [HttpPost]
     [Authorize]
     public async Task<IActionResult> SendEmployeeQuestion(SetEmployeeQuestionQuery request)
     {

       BaseResponse resp = new BaseResponse();
       try {
            var resultContent = await MediatrSend(request);
            var jsonResponse = resultContent.Content.ReadAsStringAsync();

            if (result.StatusCode == System.Net.HttpStatusCode.OK)
            {
                resp = JsonConvert.DeserializeObject<BaseResponse>(jsonResponse.Result);
                resp.status = true;
                resp.message = "Success message.";
            }
            else
            {
                resp = new BaseResponse();
                resp.status = false;
                resp.message = "error message";
            }
       } catch (Exception ex) {
            resp = new BaseResponse();
             resp.status = false;
            resp.message = $"error in response {Ex.Message}"; 
        }
      
       return resp;
    }

字符串
因此,你的AJAX代码应该这样写:

$.ajax({
                type: 'POST',
                url: '@Url.Action("SendEmployeeQuestion")',
                data: {
                    ProductId: productId,
                    FirmId: firmId,
                    QuestionText: questionText
                },
                success: function (result) {
                  if (result.status === true) {                           
                    console.log('Question sent successfully:', result.message);
                    console.log('the entire result: ', result);
                   } else {
                    console.log('Question sending failed:', result.message);
                    console.log('the entire result: ', result);
                   }
                },
                error: function (error) {                       
                    console.error('AJAX error:', error.message);
                }
            });


我希望我的例子能或多或少地指导你找到解决问题的方法。

相关问题