首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jQuery ajax解析JSON数据错误

jQuery ajax解析JSON数据错误
EN

Stack Overflow用户
提问于 2011-07-25 01:38:20
回答 3查看 12.8K关注 0票数 2

我在下面的代码中遇到了一个Uncaught SyntaxError: Unexpected end of input

代码语言:javascript
运行
复制
var dataURL = "LineChartController?tp=" + tpAtt + "&dept=" + dept + "&date=" + dateMY;
               alert(dataURL);
               var JSONdata = jQuery.ajax({
                              type: "GET",
                              url: dataURL,
                              async: false
                              }).responseText;

var psSeriesData2 = JSON.parse(JSONdata);

我试着环顾四周,但没有找到任何解决方案。这些是我采取的步骤。

确保JSONdata正确-通过http://www.jsonlint.com/检查,并确保我已关闭所有括号

JSONdata的格式如下:

代码语言:javascript
运行
复制
[{"Dates":["1-10","2-10","3-10","4-10","5-10","6-10","7-10","8-10"],"psScores":[78.78787878787878,79.7979797979798,78.78787878787878,78.78787878787878,78.78787878787878,79.7979797979798,79.7979797979798,76.92307692307693]}]

我做的另一件事是我使用了prototype.js和其他导致错误的javascript库,

代码语言:javascript
运行
复制
Uncaught TypeError: Object function $(element) {
   if (arguments.length > 1) {
      for (var i = 0, elements = [], length = arguments.length; i < length; i++)
      elements.push($(arguments[i]));
      return elements;
   }
   if (Object.isString(element))
      element = document.getElementById(element);
      return Element.extend(element);
   } has no method 'ajax'

我通过论坛搜索,发现解决方案是将$.ajax更改为jQuery.ajax,但在此之后,出现了Uncaught SyntaxError: Unexpected end of input错误。

感谢在这个问题上的任何帮助。你知道问题出在哪里吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-25 02:33:19

您的服务器是否指定了application/json的响应类型?如果是这样,jQuery将在返回结果之前自动解析结果。这意味着,您正在尝试解析已经解析过的内容。

尝试在调用中指定dataType,jQuery将为您预先解析结果。

如果可能,您还应该尝试异步完成此操作。

代码语言:javascript
运行
复制
var dataURL = "LineChartController?tp=" + tpAtt + "&dept=" + dept + "&date=" + dateMY;
var JSONdata = jQuery.ajax({
     type: "GET",
     dataType: "json",
     url: dataURL
}).done(function(jsonData){
     // do something with the data, it should already be parsed
     alert(jsonData.length); // your data sample is an array, see if it gets a length back
}).fail(function(xhr){
     // uh oh, we failed.. you should always handle failures too.
});
票数 2
EN

Stack Overflow用户

发布于 2013-10-17 03:15:46

我也有同样的问题,但根本原因不同。在我的API控制器中,我有

代码语言:javascript
运行
复制
public HttpResponseMessage Invite(Invitation invitation)
{
   var response = Request.CreateResponse(HttpStatusCode.OK);
   return response;

这个问题的解决方案是添加一个响应消息:

代码语言:javascript
运行
复制
 var response = Request.CreateResponse(HttpStatusCode.OK, "invitation sent");

这为我的ajax方法提供了它希望解析的预期输入。

票数 4
EN

Stack Overflow用户

发布于 2011-07-25 01:43:24

听起来您需要应用JQuery的noConflict(),以便Prototype可以保留$

示例:

代码语言:javascript
运行
复制
<script type="text/javascript" src="other_lib.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
  $.noConflict();
  jQuery(document).ready(function($) {
    // Code that uses jQuery's $ can follow here.
  });
  // Code that uses other library's $ can follow here.
</script>

文档:http://api.jquery.com/jQuery.noConflict/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6808492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档