我正在使用带有WEB API调用的ASP.NET MVC,试图理解为什么我会失败'当使用异步和'成功'当使用sync ajax call
时 <div class="form-group">
<button class="btn btn-secondary btn-single" onclick="register(); ">Authenticate</button>
</div>
//此方法失败
function register() {
var uri = '/api/RegisterAccount/GetSessionId';
$.getJSON(uri)
.done(function (data) {
alert('success');
})
.fail(function (jqXHR, textStatus, err) {
alert('failed!!');
});
}
//此方法成功
function register() {
var uri = '/api/RegisterAccount/GetSessionId';
$.ajax({
//type: "POST",
url: uri,
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function (data) {
alert('success');
},
error: function (xhr, textStatus, errorThrown) {
alert('failed!');
}
});
}
// ASP.NET控制器
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Security.Principal;
using System.Web;
using System.Web.Http;
using System.Web.Security;
using CurrencyProtector.EbayProxy;
using CurrencyProtector.Models;
namespace CurrencyProtector.Controllers
{
public class RegisterAccountController : ApiController
{
[Route("api/RegisterAccount/GetSessionId")]
public string GetSessionId()
{
System.Threading.Thread.Sleep(3000);
return "mysession";
}
.
.
.
编辑刚刚发现它可能与控制器上的Thread.Sleep有关
答案 0 :(得分:0)
当您使用$.getJSON()
时,它会在收到回复后自动调用$.parseJSON()
。您返回的数据只是一个字符串标识符,无法成功解析为JSON。因此,它不是您的GET请求失败,而是实际解析您的数据。
如果您只是尝试解析您提供的字符串,则会得到相同的结果:
console.log($.parseJSON("mysession"));
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
&#13;