2014-01-13 3 views
0

Я использую плагин jquery.timepicker. (Ссылка: http://jonthornton.github.io/jquery-timepicker/)jQuery массив не работает после вызова Ajax

См пример кода ниже (это работает)

var disableTime= [['12:30 PM', '1:00 PM'], ['11:30 AM', '12:00 PM']]; 


$("#InterviewTime").timepicker(

          { 
           'minTime': '7:00am', 
           'maxTime': '9:00pm', 
           'disableTimeRanges': disableTime 
          } 
          ); 

Однако, мне нужно получить данные для «disableTime» переменной с сервера через Ajax вызова. Для этого я готовлю строку C# (в моем ASP.NET MVC-контроллере) в том же формате, что и выше, в переменной «disableTime». Я получаю отформатированную строку в JQuery, как Json строку, а затем преобразовать строку в массив яваскрипта ... как показано ниже

   var disableTime = jQuery.makeArray(data); 

, но это не работает

Любой догадаться, почему это не работает?

Если я вручную копирую данные с помощью console.log (jQuery.makeArray (data)), а затем назначить скопированное скопированное значение переменной «disableTime», он снова отлично работает.

Вот полный код

MVC контроллер

var outputStr = "[['12:30 PM', '1:00 PM'], ['11:30 AM', '12:00 PM']]"; 
return Json(outputStr, JsonRequestBehavior.AllowGet); 

JQuery

$.ajax({ 
         url: '@Url.Action("GetUnavailableTime", "Interview")', 
          type: 'GET', 
          data: { 'scheduledDate': scheduledDate, 'timeZone': timeZone}, 
          contentType: "application/json; charset=utf-8", 
          dataType: 'json', 
          success: function (data) { 
           var disableTime = jQuery.makeArray(data); 

           $("#InterviewTime").timepicker(
           { 
            //'minTime': newtime, 
            'minTime': '7:00am', 
            'maxTime': '9:00pm', 
            'disableTimeRanges': disableTime 
           } 
           ); 
          }, 
          error: function (xhr, err) { 
           alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status); 
           alert("responseText: " + xhr.responseText); 
          } 
         }); 
+0

Используйте fiddler/firebug, чтобы убедиться, что ваша страница вызвана. После этого убедитесь, что возвращенный JSON действителен. –

ответ

0

Если data в вашем примере это строка JSON, не используйте makeArray. Вместо этого используйте JSON.parse(data). makeArray ожидает объект, а не строку.

Обратите внимание, что JSON должен быть действительным JSON, то есть все строки должны содержаться в двойных кавычках с правильно экранированным контентом и правильно закрытыми скобками. Запустите его с помощью проверки подлинности JSON, чтобы убедиться, что ваш скрипт получает действительный JSON.

+0

спасибо за ответ. Json.Parse дает ошибку: Uncaught SyntaxError: Неожиданный токен: я пробовал эту инструкцию: var disableTime = JSON.parse (data); –

+0

Убедитесь, что ваш JSON использует двойные кавычки, никогда не одинарные кавычки. Используйте http://pro.jsonlint.com/, чтобы убедиться, что ваша строка действительно действительна JSON. – nullability

0

Вы можете использовать getJSON(), так как ваша страница возвращает JSON. getJSON автоматически проанализирует строку JSON.

$.getJSON('yourURL', function (disableTime) { 
    $("#InterviewTime").timepicker(
    { 
     'minTime': '7:00am', 
     'maxTime': '9:00pm', 
     'disableTimeRanges': disableTime 
    } 
    ); 
}); 
Смежные вопросы