Как я могу вернуть данные через C # AJAX в переменную javascript? - PullRequest
0 голосов
/ 15 июля 2010

Я использую jQuizMe, плагин jQuery для тестов, и я хочу получить вопросы о тестах из базы данных. Поэтому я подумал, что мог бы использовать вызов ajax для извлечения вопросов и их обработки для имитации массива, подобного JSON. Затем я хотел бы взять эти AJAX responseData и сохранить их (в виде JSON-подобного массива) в переменной javascript.

Вот код:

$(document).ready(function() {
    var quiz = new Array();
    $.get("/base/GameList/GetGameQuestions/StatesAndCapitalsGame.aspx", function(data)  {
        quiz = data;
    });

    var options = {
        intro: "Find out if you know which Capital is for which State.",
        allRandom: true,
        title: "State Capitals Quiz",
        fxType: 1
    };
    var lang = {
        praise: "Great job, right!"
    };

    $("#quizArea").jQuizMe(quiz, options, lang);

});

И возвращающиеся данные выглядят так:

{
    multiList: [
        { ques: "What is the capital of Alabama?",
          ans: "Montgomery",
          ansSel: ["Hamptonville", "Ellenville", "Somerville"]
        },
        { ques: "What is the capital of New Jersey?",
          ans: "Trenton",
          ansSel: ["Hamptonville", "Ellenville", "Somerville"]
        }
    ]
};

Я думал, что это, вероятно, не будет работать правильно, потому что он просто присваивает этот ответ переменной quiz в виде строки, но я надеялся, что вы все сможете направить меня в правильном направлении.

Спасибо!

EDIT: Я решил это, используя то, что предложил Груо (в измененном виде). Всем спасибо за ваши предложения!

$(document).ready(function() {
function runQuiz(quiz) {
   var options = {
       quizType: "multiList",
       intro: "Find out if you know which Capital is for which State.",
       allRandom: true,
       title: "State Capitals Quiz",
       fxType: 1
   };
   var lang = {
       praise: "Great job, right!"
   };
    var stuff = new Array();
    stuff = eval('(' + quiz + ')');
   $("#quizArea").jQuizMe(stuff, options, lang);
}

    $.get("/base/GameList/GetGameQuestions/StatesAndCapitalsGame.aspx", function(data)  {
        runQuiz(data);
    });
});

Ответы [ 4 ]

1 голос
/ 15 июля 2010

Вы можете добавить обработчики dataFilter и error для вызова jQuery.ajax, чтобы проверить, как выглядят ваши данные JSON при получении:

var runQuiz = function(quiz) {
   var options = {
       intro: "Find out if you know which Capital is for which State.",
       allRandom: true,
       title: "State Capitals Quiz",
       fxType: 1
   };
   var lang = {
       praise: "Great job, right!"
   };

   $("#quizArea").jQuizMe(quiz, options, lang);
}

$.ajax({
      type: "POST",
      url: "/base/GameList/GetGameQuestions/StatesAndCapitalsGame.aspx",
      data: { },
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      timeout: 15000,
      dataFilter: function(data, type) {
          // alert(data);
          return data;
      },
      error: function(xhr, textStatus, errorThrown) {
          // alert(textStatus + ' ' + errorThrown);
      },
      success: runQuiz
 });

В целях отладки вы можете раскомментировать обработчикдля события dataFilter, чтобы получить необработанную строку JSON, которую возвращает ваш веб-сервис.

1 голос
/ 15 июля 2010

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

Их очень легко настроить:

Синтаксис JavaScript для вызова методов страницы с использованием объекта PageMethods и передачи параметров:

function onYourEvent()
{
     PageMethods.Somemethod(p1,p1,p3,onSucceed,onError); 
}

//CallBack method when the page call succeeds
function onSucceed(results, currentContext, methodName)
{
      alert(results);
}

//CallBack method when the page call fails due to interna, server error
function onError(results, currentContext, methodName)
{
      alert(results);
}

Затем в приведенном ниже коде вам нужно создать открытый статический метод (Somemethod) и установить его как [WebMethod]

1 голос
/ 15 июля 2010

На обратной передаче CJ AJAX установите для переменной javascript значение <% = myVariable%>, заменив myVariable любой переменной, которую вы пытаетесь установить в javascript.Просто убедитесь, что ваш JavaScript находится внутри UpdatePanel.Когда javascript будет переписан на стороне сервера, ваша переменная будет применена к сценарию до отображения страницы.

0 голосов
/ 15 июля 2010

Поскольку вы возвращаете данные JSON, используйте функцию $.getJSON() вместо $.get().

Возвращаемые данные будут автоматически оцениваться в объект JavaScript, а не в строку.Кроме этого, я бы сказал, что вы на правильном пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...