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提交后触发
数据返回钱页面无法跳转
那么数据返回前,页面跳转了,你的数据要返回给谁在处理呢?追问
数据不要了呗
追答问题不清晰
ajax不会造成页面其他操作的阻塞
无法解析 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后在数据返回前页面无法跳转的主要内容,如果未能解决你的问题,请参考以下文章
Express POST - 返回的 JSON 被 JQuery 视为无效