【问题标题】:ASP.NET Web Api fails on getJSON asyncASP.NET Web Api 在 getJSON 异步上失败
【发布时间】:2015-04-02 17:03:14
【问题描述】:

我正在使用带有 WEB API 调用的 ASP.NET MVC,试图了解为什么我在使用异步时会“失败”而在使用同步 ajax 调用时会“成功”

    <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";
            }
.
.
.

EDIT刚刚发现可能与控制器上的Thread.Sleep有关

【问题讨论】:

  • 您在 jquery 中收到的实际错误消息是什么?

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 2017-07-19
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    相关资源
    最近更新 更多