JavaScript调用时函数不返回数据 - javascript

在使用单元测试进行调试的同时,该函数返回预期的数据,但是,当从JavaScript调用同一函数时,该函数会被命中,但不会返回任何数据。

我正在dll中调用的该函数已挂起,但是仅当已由JS请求调用的函数调用该函数时,为什么会这样呢?

编辑:

就像在注释中一样,我最大的猜测是它与正在使用的线程有关,但是我不知道,因为该函数本身正在工作,只是不能从AJAX调用的C#函数中调用。

AJAX通话:

function getOnHoldTickets() {
    $.ajax({
        type: "GET",
        url: "/cloud/getTicketCount/",
        dataType: "json",
        success: function (data) {
            onHoldHandler(data);
        },
        failure: function () {
            alert("getOnHoldTickets failled");
        }
    });
}

控制器:

// api gets hit from the JS call
[Route("cloud/getTicketCount")]
public List<UberTicket> getTicketCount()
{
    var tickets = Dashboard.getTODTickets("On Hold"); 
    return tickets;
}


[TestMethod] // calls the same method as JS
public void supportTicketTesting()
{
    var openTickets = Dashboard.getTODTickets("On Hold");
    var check = openTickets != null;
}

// method calling the dll
public static List<UberTicket> getTODTickets(string type)
{
    var tickets = UberAPI.getTODTickets(type);
    return tickets;
}

DLL方法:

// the method within the dll that's hanging when called by a function invoked by JS
public static async Task<RootObjectClass<T>> genericGet<T>(string function, string parameters)
{
    try
    {
        // create credentials to pass to httpClient
        var httpClientCredentials = new HttpClientHandler()
        {
            Credentials = new NetworkCredential(uberAPIUser, uberAPIPass)
        };

        using (var client = new HttpClient(httpClientCredentials))
        {
            // unsure if the headers are being passed in correctly - getting good response though
            client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/x-www-form-urlencoded");
            var response = await client.GetAsync(ubersmithURL + function + parameters);
            var result = await response.Content.ReadAsStringAsync();
            // remove nulls from json
            result = Regex.Replace(result, ":null,", ":\"\",");
            var ms = new MemoryStream(Encoding.UTF8.GetBytes(result));
            var success = JsonConvert.DeserializeObject<RootObjectClass<T>>(result);
            return success;
        }
    }
    catch(Exception ex)
    {
        // log error
    }
    return new RootObjectClass<T>();
}

参考方案

尽管这可能无法完全解决问题,但您不应返回C#数据类型,因为JavaScript无法解析它们,并且在最坏的情况下会导致类似于此的错误

  System.Collections.Generic.List`1 [...]

就像我在评论中说的那样,您应该从控制器中返回JsonResult来检索JS中的数据。

[Route("cloud/getTicketCount")]
public JsonResult getTicketCount()
{
    var tickets = Dashboard.getTODTickets("On Hold"); 
    return Json(tickets ,JsonRequestBehavior.AllowGet);
}

Understanding JsonRequestBehavior.AllowGet

和你的Ajax电话

$.ajax({
    type: "GET",
    url: "/cloud/getTicketCount/",
    dataType: "json"
})
.done(function(data){
   console.log(data);
})
.fail(function(xhr){
    console.log(xhr.responseText); 
});

编辑:

我相信这是您遇到的一个僵局问题。 Perfect answer elaborating the issue is here.

javascript popupwindow之后的行如何工作? - javascript

好的,我有一个来自后面代码的方法,可以创建一个popupwindow。然后有一行代码要在那之后执行,我想知道那行代码何时执行,是在使用popupwindow之后执行还是在创建popupwindow之后执行?例如:void exPopupWindowMethod() { string scr = "window.open('exampleP…

Javascript-Urls的奇怪字符串比较行为 - javascript

最近,在编写我无法理解的javascript时遇到了字符串比较的问题。我从完全相同的网址创建了两个字符串,当我比较它们时返回false,但是在重新分配相同的字符串后,比较返回true。这是我的示例:var str1 = "http://google.com/"; var str2 = "http://google.com‏/&#…

Javascript-从当前网址中删除查询字符串 - javascript

单击提交按钮后,我需要从网址中删除查询字符串值。我可以用jQuery做到这一点吗?当前网址:siteUrl/page.php?key=value 页面提交后:siteUrl/page.php 实际上,我已经从另一个带有查询字符串的页面着陆到当前页面。我需要在页面首次加载时查询字符串值以预填充一些详细信息。但是,一旦我提交了表格,我就需要删除查询字符串值。我已…

使用C#执行JavaScript页面 - javascript

我正在尝试使用C#抓取一个网站。在此过程中的某个时候,网站返回了我需要执行的JavaScript页面,以便它将生成一些参数,然后使用所生成的参数作为查询变量来发布请求。这是JavaScript文件https://jsfiddle.net/7aw5vr59/浏览器生成的结果文件如下所示:<imimxxxyyy id="ActiveX"…

使用php echo定义一个javascript var - javascript

我已经看到了对该问题的多个答复-因此,我敢肯定有人会很快将其标记为重复,但是我在任何其他线程中都没有看到该特定问题的答案。我有两个测试文件:a.php和a.js在a.php中,我定义$q = $_GET['q']; 效果很好。然后,我调用一个单独的a.js文件,其中有:var partNumber = " <?php ec…