ASP.NET Web Api在getJSON异步上失败

时间:2015-04-02 17:03:15

标签: jquery asp.net asp.net-web-api

我正在使用带有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有关

1 个答案:

答案 0 :(得分:0)

当您使用$.getJSON()时,它会在收到回复后自动调用$.parseJSON()。您返回的数据只是一个字符串标识符,无法成功解析为JSON。因此,它不是您的GET请求失败,而是实际解析您的数据。

如果您只是尝试解析您提供的字符串,则会得到相同的结果:

&#13;
&#13;
console.log($.parseJSON("mysession"));
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
&#13;
&#13;
&#13;