2013-09-04 5 views
1

Я хотел бы преобразовать результат, который я получаю из вызова ajax в массив JavaScript. Как это сделать без использования jQuery?parse JSON без jQuery

Или это будет нормально, просто можно зацикливать массив json без преобразования в массив JavaScript.

На данный момент мне просто нужно оповестить результаты о том, что я получаю от службы ASMX. Использование jQuery не является вариантом.

данных из запроса:

string xmlns="http://tempuri.org/" 
[{"Action":"Test1","Target":"#cTarget","Payload":"Hello"},{"Action":"Test2","Target":"#cTarget","Payload":"World"}] 
string 

     [ 
      { 
       "Action":"Test1", 
       "Target":"#cTarget", 
       "Payload":"Hello" 
      },   
      { 
       "Action":"Test2", 
       "Target":"#cTarget", 
       "Payload":"World" 
      } 
     ] 

JavaScript кодекса

var httpRequest; 

    function makeRequest(url, input) { 
     if (window.XMLHttpRequest) { // Mozilla, Safari, ... 
      httpRequest = new XMLHttpRequest(); 
     } else if (window.ActiveXObject) { // IE 
      try { 
       httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); 
      } 
      catch (e) { 
       try { 
        httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
       } 
       catch (e) {} 
      } 
     } 

     if (!httpRequest) { 
      alert('Giving up :(Cannot create an XMLHTTP instance'); 
      return false; 
     } 
     httpRequest.onreadystatechange = function(){ 
      if (httpRequest.readyState === 4) { 
       if (httpRequest.status === 200) { 
        var results = httpRequest.responseText; 
         var asJavaScriptArray = JSON.parse(results); 

        } 
       } 
      //} 
     }; 

     httpRequest.open('POST', url); 
     httpRequest.setRequestHeader('Content-Type', 'application/json'); 
     httpRequest.send(input); 
    } 

    var endpointAddress = "Core/RecipeDemo.asmx"; 
    var url = endpointAddress + "/Base"; 
    makeRequest(url, "{}");` 

C# Код

[System.Web.Script.Services.ScriptService] 
public class RecipeDemo : System.Web.Services.WebService 
{ 

    [WebMethod] 
    public string Base() 
    { 

     List<Recipe> listOfRecipe = new List<Recipe>(); 
     JavaScriptSerializer jss = new JavaScriptSerializer(); 

     listOfRecipe.Add(new Recipe {Action = "Test1", Payload = "Hello", Target = "#cTarget"}); 
     listOfRecipe.Add(new Recipe {Action = "Test2", Payload = "World", Target = "#cTarget"}); 

     return jss.Serialize(listOfRecipe); 
       } 
} 
+1

Затем просто используйте встроенную функцию JSON.parse (TheDataFromRequest) – frenchie

+2

Обратите внимание, что собственные функции JSON являются родными только для IE8 + и настоящих браузеров - если вы поддерживаете IE7, вам понадобится библиотека, например [json2.js] (https://github.com/douglascrockford/JSON-js). –

ответ

3

Вы уже должны иметь что-то взять строку JSON к объекту

JSON.parse(myJsonString) 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse

Чтобы создать резервный из объекта в строку в JSON.stringify(myObject)

+0

asJavaScriptArray \t Объект {d = "{" Действие ":" Тест1" , "Тар ... и др", "полезная нагрузка": "Мир"}] "} \t д =" [ { "Действие": «Test1», «Target»: «# cTarget», «Полезная нагрузка»: «Hello»}, \t \t {«Действие»: «Test2», «Target»: «# cTarget», «Полезная нагрузка»: «World» } \t] " – user2438077

+0

Ну, похоже, я просто разбираю его частично – user2438077

-1

Вы понимаете, что JSON является корректным подмножеством JavaScript, не так ли?

Это означает derserializing строку JSON в объект Javascript так же легко, как:

var json = MakeAjaxRequestHere() ; 
var deseralizedJsonObject = eval('(' + json + ')') ; 

Следует отметить, однако, что если вы не доверяете источник JSON, Eval имеет некоторые риски, как он будет оценивать любая программа javascript. См. http://www.json.org/js.html для получения дополнительной информации.

+0

Использование eval против ответа ajax не звучит очень безопасно. Если dns или hostfile были отравлены, могут произойти плохие вещи. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#Don.27t_use_eval.21 – Murtnowski

+1

Nooooo! Это траааап – masonk