2010-07-15 88 views
0

我正在使用jQuizMe,用於測驗的jQuery插件,我想從數據庫中獲取測驗問題。所以我認爲我可以使用ajax調用來獲取問題並處理它們以模仿類似JSON的數組。然後,我想要獲取該AJAX responseData並將其作爲一個類似JSON的數組存儲在一個JavaScript變量中。如何通過C#AJAX將數據返回給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變量作爲一個字符串,但我希望你們都可以指引我在正確的方向。

謝謝!

編輯: 我通過使用Groo建議(修改後的形式)解決了這個問題。感謝大家的所有建議!

$(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); 
    }); 
}); 

回答

1

您可以添加dataFiltererror處理的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事件,以獲取您的Web服務正在返回的原始JSON字符串。

+0

哇這很好,謝謝大修。錯誤事件中的警報現在顯示出存在「無效的JSON」錯誤。任何想法是什麼導致我的JSON無效? 是否需要將其作爲'quiz = {// data};' 發送回來我目前正在將它作爲'{// data}發送;'' – samandmoore 2010-07-15 17:40:02

1

在你的C#AJAX回發,你的JavaScript變量設置爲<%= MYVARIABLE%> - 與任何變量,你正試圖在JavaScript來設置更換MYVARIABLE。只要確保你的javascript在UpdatePanel裏面。當JavaScript在服務器端重寫時,您的變量將在頁面呈現之前應用於腳本。

1

您可以使用PageMethods使Web服務調用&檢查答案是否正確。

他們很容易安裝:

的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]

0

由於您要返回JSON數據,請使用$.getJSON()函數而不是$.get()

返回的數據將自動評估爲JavaScript對象而不是字符串。除此之外,我會說你是正確的。

相關問題