Sta*_*ack 22 javascript jquery json parse-error
当我尝试从http://api-v3.deezer.com/1.0/search/album/?q=beethoven&index=2&nb_items=2&output=json获取JSON 时:
(jQuery 1.6.2)
$.ajax({
type: "GET",
url: url,
dataType: "jsonp",
success: function (result) {
alert("SUCCESS!!!");
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.statusText);
alert(xhr.responseText);
alert(xhr.status);
alert(thrownError);
}
});
Run Code Online (Sandbox Code Playgroud)
我明白了: parsererror; 200; undefined; jquery162******************** was not called
但是使用http://search.twitter.com/search.json?q=beethoven&callback=?&count=5中的JSON 工作正常.两者都是有效的JSON格式.那么这个错误是什么?
[UPDATE]
@ 3ngima,我在asp.net中实现了这个,它运行正常:
$.ajax({
type: "POST",
url: "WebService.asmx/GetTestData",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {
alert(result.d);
}
});
Run Code Online (Sandbox Code Playgroud)
WebService.asmx:
[WebMethod]
public string GetTestData()
{
try
{
var req = System.Net.HttpWebRequest.Create("http://api-v3.deezer.com/1.0/search/album/?q=beethoven&index=2&nb_items=2&output=json");
using (var resp = req.GetResponse())
using (var stream = resp.GetResponseStream())
using (var reader = new System.IO.StreamReader(stream))
return reader.ReadToEnd();
}
catch (Exception) { return null; }
}
Run Code Online (Sandbox Code Playgroud)
T.J*_*der 34
这是因为你告诉jQuery你期待JSON-P,而不是JSON.但回报是JSON.JSON-P名字错误,以一种不会导致混淆的方式命名.这是通过标签将数据传递给函数的惯例script.相比之下,JSON是一种数据格式.
JSON示例:
{"foo": "bar"}
Run Code Online (Sandbox Code Playgroud)
JSON-P示例:
yourCallback({"foo": "bar"});
Run Code Online (Sandbox Code Playgroud)
JSON-P起作用,因为JSON是JavaScript文字表示法的子集.JSON-P无非是一个承诺,如果你告诉别人你打电话来叫什么函数名称后面(通常是通过把一个服务更多的callback参数,在请求),响应会的形式functionname(data),这里data将是"JSON "(或者更通常,一个JavaScript的文本,这可能不是很相同的事情).你打算在script标签中使用JSON-P URL src(jQuery为你做的),以绕过同源策略,防止ajax请求从源自它们的文档以外的原点请求数据(除非服务器支持CORS和你的浏览器也一样).
| 归档时间: |
|
| 查看次数: |
64664 次 |
| 最近记录: |