我使用jQuery.ajax()解析从我的服务器返回的一些JSON数据时遇到困难
要执行我正在使用的AJAX:
$.ajax({
url: myUrl,
cache: false,
dataType: "json",
success: function(data){
...
},
error: function(e, xhr){
...
}
});
Run Code Online (Sandbox Code Playgroud)
如果我返回一个项目数组,那么它工作正常:
[ { title: "One", key: "1" }, { title: "Two", key: "2" } ]
Run Code Online (Sandbox Code Playgroud)
调用success函数并接收正确的对象.
但是,当我尝试返回单个对象时:
{ title: "One", key: "1" }
Run Code Online (Sandbox Code Playgroud)
调用错误函数,xhr包含'parsererror'.我已经尝试将JSON包装在服务器上的括号中,然后再将其发送到网络中,但它没有任何区别.然而,如果我将内容粘贴到Javascript中的字符串中然后使用eval()函数,它会完美地评估它.
我有什么想法我做错了吗?
安东尼
我试图用jQuery和JSON预先形成一些基本操作.目前在jQuery接受来自我的播放框架应用程序的JSON响应时遇到困难.下面是仍然产生错误的代码的简化版本.
$.ajax({
type: 'POST',
url: "@{FrontEnd.isUsernameAvailable()}",
data: "name=thisnameisavailable",
cache: false,
success: function(data) {
console.log("Success... ");
},
error: function(jqXHR, textStatus, errorThrown) {
console.log("Error... " + textStatus + " " + errorThrown);
},
dataType: 'json'
});
Run Code Online (Sandbox Code Playgroud)
始终触发错误回调.它显示
错误... parsererror jQuery15001997238997904205_1298484897373未被调用
通过Firebug检查返回的JSON显示没有错误,各种JSON lint工具也验证.将dataType更改为"text"会调用成功.但我试图使用isUsernameAvailable调用作为jQuery验证插件的一部分,所以我需要它来返回有效的JSON.
我刚刚得出结论,无论我怎么做,jQuery的ajax调用都无法在IE 8中使用JSON数据.我发现我可以使用jQuery 1.3.2库来修复这个问题,但1.4根本就不会用JSON ajax请求来玩.即使返回的JSON数据非常简单,也不存在格式无效的问题.例如:
{"x":"a"}
Run Code Online (Sandbox Code Playgroud)
这与我是否使用Java servlet返回JSON数据或简单的固定文本文件无关.无论dataType还是contentType.无论GET还是POST.无论我使用$ .ajax还是$ .getJSON.这一切都适用于Firefox 3.6.
然后我突然意识到要参考Firebug Lite和IT WORKED!突然间问题消失了.无论是在响应中(在servlet中)修改contentType,还是在请求中指定的dataType,它都可以工作.
如果我再次链接到Firebug Lite,问题就会返回...即使我的代码从未实际使用它.
有没有人见过这种行为,有没有人有修复或解决方法?我不想再停止使用Firebug Lite了.感谢您的任何见解.同样,只有在组合jQuery 1.4,Firebug Lite,JSON数据和IE 8时才会出现问题.
这是对servlet的ajax调用,如果重要的话:
$.ajax({
cache: false,
url:"http://localhost:8080/Performance_Reporting/TestServlet",
type:"GET",
contentType: "application/json",
dataType: "json",
timeout:30000,
success: function(d, status, req)
{
$("#result").text(d.x);
},
error: function(req, status, err)
{
$("#result").text(req.responseText);
}
})
Run Code Online (Sandbox Code Playgroud) 我的代码看起来像这样:
$.get('http://files.mysite.com/data.json', function(data) {
console.log(data);
}, "jsonp");
Run Code Online (Sandbox Code Playgroud)
当我Network从Firebug查看菜单内部时,我可以看到对我的JSON文件的有效调用,当我打开它时,它会获得所有信息.
但是Console保持沉默.没有AJAX电话的迹象,也没有我的记录data.
我的AJAX呼叫与我的JSON文件不在同一个域中.这就是我使用的原因jsonp
有任何想法吗??
我有以下ajax帖子:
$.ajax( {
type: "POST",
url: "http://192.168.7.9/api",
dataType: 'json',
data: { username: "john.doe", password: "123456", method: "search_samples" },
success: function ( data ) {
// Never get here
},
error: function ( XMLHttpRequest, textStatus, errorThrown ) {
// Always here: if async true, errorThrown has no message
// otherwise I se the NETWORK_ERR message
}
} );
Run Code Online (Sandbox Code Playgroud)
它返回此错误:NETWORK_ERR:XMLHttpRequest异常101.
我已经阅读了一些关于此错误的SO帖子,大多数建议我将async设置为true.这会删除错误消息 - 但它仍然是一个错误,我从来没有得到有效的数据.它似乎删除了没有帮助的错误消息.
在小提琴手中,在同样的开发机器上,这完美地运作 - 这是一个问题吗?原产地问题?我的语法有问题吗?