当前位置: 首页 > 面试题库 >

jQuery.ajax()解析器错误

司马腾
2023-03-14
问题内容

当我尝试从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);
    }
});

我得到: parsererror; 200; undefined; jquery162******************** was not called

但是使用http://search.twitter.com/search.json?q=beethoven&callback=?&count=5的JSON
可以正常工作。两者都是有效的JSON格式。那么这个错误是关于什么的呢?

[更新]

@ 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);
    }
});

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; }
}

问题答案:

这是因为您要告诉jQuery您期望返回JSON-P而不是JSON。但是返回的是JSON。JSON-
P的命名错误极高,以一种不会引起混乱的方式命名。这是通过标签将数据传送到函数的 约定script。相反,JSON是一种数据格式。

JSON范例:

{"foo": "bar"}

JSON-P的示例:

yourCallback({"foo": "bar"});

JSON-P之所以有效,是因为JSON是JavaScript文字表示法的子集。JSON-
P只是一个承诺,即如果您告诉服务您正在调用要回调的函数名(通常通过callback在请求中放置参数),则响应将采用的形式functionname(data),其中data将是“
JSON ”(或更常见的是JavaScript文字,这可能 不太 一样)。您应该在script标记的JSON中使用JSON-P URL
src(jQuery为您执行此操作),以避开Same Origin
Policy,该策略可防止ajax请求从其原始文档以外的其他来源请求数据(除非服务器支持)CORS和您的浏览器也可以)。



 类似资料:
  • 问题内容: 我无法从JQery.ajax调用获取JSON对象的内容。我的电话: 似乎正确返回了JSON对象,因为“ alert(data)”显示以下内容 但是当我尝试使用以下方法在页面上显示ID或名称时: 它将“未定义”返回到页面。我究竟做错了什么? 谢谢您的帮助。 问题答案: 数据以JSON的字符串表示形式返回,您无需将其转换回JavaScript对象。将设置为仅使其自动转换。

  • 我一直得到一个JSON解析器错误,每次我尝试连接从Android到php帐户。下面你会看到我得到的错误: 谁能帮帮我吗。。。 PHP代码: Android代码: Android代码: 公共JSONObject getJSONFromUrl(字符串url,列表参数){ 注册用户JSONObject PhP警告: php代码: 链接89是$no_of_rows 用户表结构: mysql_error:

  • 问题内容: 这工作正常: 这将返回400 Bad Request(只是使用.ajax来支持错误处理的上述jQuery的重新格式)。 问题答案: 我认为您只需要再添加2个选项(和):

  • 无法分析文件名。主要原因是新文件需要路径名,但我正在传递字符串。如何将字符串转换为路径名?

  • 问题内容: 我正在构建用于学习的编程laguange的简单语法。 我遇到了奇怪的错误,对我来说毫无意义。 我正在使用此语法的预构建词法分析器和解析器: 我正在解析此Java代码: 最后是我要解析的字符串: 问题答案: 错误消息表示包含值“ void”的预期令牌类型与通过使用输入中的字符串“ void”产生的实际令牌类型不匹配。查看您的词法分析器规则,表明IDENTIFIER规则正在使用输入字符串’

  • 描述 (Description) jQuery.ajax( options )方法使用HTTP请求加载远程页面。 $ .ajax()返回它创建的XMLHttpRequest。 在大多数情况下,您不需要直接操作该对象,但如果您需要手动中止请求,则可以使用该对象。 语法 (Syntax) 以下是使用此方法的简单语法 - <i>$</i>.ajax( options ) 参数 (Parameters)