Jquery 调用了post后在数据返回前页面无法跳转

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jquery 调用了post后在数据返回前页面无法跳转相关的知识,希望对你有一定的参考价值。

如题,求大神支招,各种页面跳转方法均试过了,abort终止ajax请求也无效
具体情况是我做一个类似win8桌面的项目,上面有一些通过ajax加载的信息,但用户可以不必等待信息加载完就打开链接,此时会发生跳转,但是因ajax数据还没有返回所以无法跳转
$(document).ready(function ()
//ajax获取信息
info = $.ajax(
url: '/main/ajaxinterface',
data: operation: 'GetUserScore', arg: ,
type:'POST',
success: function (result)
if (result['Success'])
此处省略


,

);
);
//另外某处
info.abort();
location=url;
//url的值没问题,在ajax提交后触发

参考技术A 不知道你在说什么啊
数据返回钱页面无法跳转
那么数据返回前,页面跳转了,你的数据要返回给谁在处理呢?追问

数据不要了呗

追答

问题不清晰
ajax不会造成页面其他操作的阻塞

参考技术B async:true

无法解析 JQuery ajax 调用返回的 JSON

【中文标题】无法解析 JQuery ajax 调用返回的 JSON【英文标题】:Unable to parse JSON returned by JQuery ajax call 【发布时间】:2013-10-15 19:51:48 【问题描述】:

我正在使用下面给出的 JQuery ajax 调用方法

$.post('../User/GetCountry',
        
            zone: 1
        ,
        function (data) 
            alert(data);
            alert(data["Countries"]);
        , "json").fail(function (jqXHR, textStatus, errorThrown) 
            //alert(textStatus);
        );

C#代码

public static string GetCountry()
    
        var result = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Countries.GetAll());
        return result;
    

现在当我在服务器端调试我的代码时,我看到下面的结果,根据我的说法,这是完美的 json

["Id":4,"Name":"France","Id":3,"Name":"Germany"]

但在 javascript 中,我得到的 json 为

[[object Object],[object Object]]

谁能告诉我我在这里缺少什么

已解决 var jsonData = JSON.stringify(data); var jsonParse = JSON.parse(jsonData);

【问题讨论】:

它只是告诉你这是一个对象数组 :) 这是真的 改用console.log(data)。 alert() 将尝试为您字符串化,这意味着 objecst 将只是 object Object 您正在返回一个对象数组。尝试使用JSON.NET 反序列化数组。这样会容易很多! @icemanind 它已经被反序列化,因此他看到的是 [object Object]。 @RajKumar 很有趣,这是我刚刚在***.com/questions/19116385/… 发布的内容:) 【参考方案1】:

您的代码存在一些问题。首先,尽管您将参数zone 传递给Web 服务方法,但该方法本身不会接收此参数。其次,如果要返回 JSON,请不要使用返回类型字符串。使用JSONResult。这也将允许您删除 static 关键字。我建议像这样更改您的方法:

public JSONResult GetCountry(int? zone)

    // ...

您应该进行两项最终更改。第一种是使用 ASP.Net MVC 内置的Json() 方法来处理对象的序列化。第二个是您应该始终投影您的数据层结果,即使它们碰巧已经在您要使用的结构中。这样,如果您以破坏服务的方式更改数据层对象,您将收到编译错误而不是运行时异常。

return Json(from c in Countries.GetAll() select new  Id = c.Id, Name = c.Name )

我还建议避免使用$.get$.post,因为它们抽象出在访问网络服务时可能有用的设置。如果您想简写它,我建议将 $.ajax 调用包装在您自己的函数中。您还需要考虑标准化您的 Web 服务响应。您的 Web 服务是一种协议,因此它受益于定义良好的标头。更深入的解释请看这里:Introduction to MVC Service Based Web Applications

【讨论】:

我使用的是 asp.net 而不是 MVC【参考方案2】:

试试这个:

alert(data[0].Name)

【讨论】:

【参考方案3】:
$.ajax(
    type: 'POST',
    url: '../User/GetCountry',
    data: 
        zone: 1
    ,
    success: function(data)  alert('data: ' + data); ,
    contentType: "application/json",
    dataType: 'json'
);

对我有好处。您需要确保发送的内容类型为“application/json”,最好使用Controller 中的Json() 辅助方法。

【讨论】:

【参考方案4】:

多搜索后解决了这个问题

$.post('../User/GetCountry',
    
        zone: 1
    ,
    function (data) 
        var jsonData = JSON.stringify(data); 
        var jsonParse = JSON.parse(jsonData);
        , "json").fail(function (jqXHR, textStatus, errorThrown) 
          alert(textStatus);
    );

【讨论】:

【参考方案5】:

尝试使用 JSON.parse():

$.post('../User/GetCountry',
        
            zone: 1
        ,
        function (data) 
            data=JSON.parse(data)

            alert(data["Countries"][0].Name);
        , "json").fail(function (jqXHR, textStatus, errorThrown) 
            //alert(textStatus);
        );

【讨论】:

以上是关于Jquery 调用了post后在数据返回前页面无法跳转的主要内容,如果未能解决你的问题,请参考以下文章

页面加载后在上一节重新打开 jQuery 手风琴

Express POST - 返回的 JSON 被 JQuery 视为无效

无法在 JQuery 1.6.4 中使用 CORS 进行 PUT/POST/DELETE HTTP 调用

无法解析 JQuery ajax 调用返回的 JSON

[转]jquery刷新页面(局部及全页面刷新)

jQuery移动多页切换页面前等待ajax返回数据