我试图使用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 = '';
}
型
1条答案
按热度按时间9jyewag01#
这可能是因为在你的
async Task<IActionResult> SendEmployeeQuestion
中,你返回了一个结果,但你没有设置状态和消息,这样你就可以在你的AJAX响应中处理它。你没有向你的响应传递消息。因此,你需要稍微改变一下你的函数才能以这种方式使用。我在你的
HttpPost
函数中放置了一个try catch
异常块,这样你就可以在请求失败时处理错误。这意味着它将进入你的AJAX的错误块。因为你没有提到你的
MediatrSend
函数是做什么的,我假设它发回一个HttpStatusCode
。字符串
因此,你的AJAX代码应该这样写:
型
我希望我的例子能或多或少地指导你找到解决问题的方法。