ajax异步调用失败 解决,异步任务的AJAX调用成功命中该方法,但返回失败

我有一个MVC控制器(不是api控制器)[HttpPost]方法public async Task< string>我正在从客户端向其发出ajax调用的PostDocument().该方法正在对[HttpPost]方法PostDocument(DocRepoViewModel docRepo)进行另一个API调用.下面是我的代码:

public async Task PostAdminUploadData()

{

HttpResponseMessage response = null;

//set the parameter docRepo (a complex object)

try {

using (var client = new HttpClient())

{

string uri = documentRepositoryApiUrl + Constants.PostDoc;

client.BaseAddress = new Uri(documentRepositoryApiUrl);

client.DefaultRequestHeaders.Accept.Clear();

client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

response = await client.PostAsJsonAsync(Constants.PostDoc, docRepo); //docRepo parameter for API method

}

}

catch (Exception ex){}

return (await response.Content.ReadAsAsync());

}

现在在上面的代码中,response = await client.PostAsJsonAsync(Constants.PostDoc,docRepo);代码段成功返回响应var(因为它做了我所期望的操作),但是当上述方法响应时,响应总是陷入错误:在ajax中,我的ajax:

$.ajax({

url: url,

type: 'Post',

data: data,

cache: false,

dataType: 'json',

async: true,

contentType: false,

processData: false,

success: function (data) {

alert("pass");

},

error: function (data) {

alert("field"); //always failed

}

});

C#的任何地方都不会抛出异常.请帮我解决问题

解决方法:

我遇到了类似的问题.首先,更改您的ajax请求,以便删除dataType并指定contentType:

// dataType: "json",

contentType: "application/json",

然后,尝试将操作的返回类型更改为Task< ActionResult&gt ;,并使用Controller上的常见方法之一,例如:

return Json(/* valid json string content */)

要么

return Content(/* read content as a string here */)

原因是WebApi控制器获得了一个序列化层,将结果转换为客户端请求的格式.相反,期望MVC控制器调用一种方法,该方法将某种动作结果(通常是视图或类似的结果)返回给视图引擎…

在尝试返回特定模型时,我在JavaScript端收到的只是该对象的Type的完全限定名称.

另一种选择可能是用[AcceptAjax]属性或类似内容装饰您的操作,我相信该属性允许该操作回复ajax请求.

标签:ajax,async-await,c,jquery

来源: https://codeday.me/bug/20191028/1954383.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值