JQuery AJAX анализировать JSON ошибка данных - PullRequest
1 голос
/ 24 июля 2011

Я сталкиваюсь с Uncaught SyntaxError: Unexpected end of input по следующему коду.

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

Я пытался осмотреться и не нашел решения. Вот шаги, которые я предпринял.

Проверка правильности данных JSON - проверено с помощью http://www.jsonlint.com/ и Убедившись, что я закрыл все скобки

JSONdata имеет следующий формат:

[{"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, которые вызывают ошибку,

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.

Ценю любую помощь по этому вопросу. Есть идеи, в чем проблема?

Ответы [ 3 ]

4 голосов
/ 16 октября 2013

У меня была та же проблема, но с другой основной причиной.в моем контроллере API у меня было

public HttpResponseMessage Invite(Invitation invitation)
{
   var response = Request.CreateResponse(HttpStatusCode.OK);
   return response;

Решением проблемы было добавление ответного сообщения:

 var response = Request.CreateResponse(HttpStatusCode.OK, "invitation sent");

Это дало моему методу ajax ожидаемый ввод, который он надеялся проанализировать.

2 голосов
/ 24 июля 2011

Звучит так, как будто вам нужно применить JQuery noConflict(), чтобы Prototype мог хранить $

Пример:

<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/

1 голос
/ 24 июля 2011

Указывает ли ваш сервер тип ответа application / json? Если это так, jQuery автоматически проанализирует результат еще до его возвращения. То есть вы пытаетесь разобрать то, что уже было проанализировано.

Попробуйте указать dataType в вашем вызове, и jQuery предварительно проанализирует результат для вас.

Вы также должны попытаться сделать это асинхронно, если это возможно.

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.
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...