2012-02-25 84 views
0

我需要帮助,我想创建一个函数,它返回来自AJAX请求的对象,所以我可以从服务器上的数据创建一个新对象,如下所示:如何从服务器返回的JSON数据创建一个JavaScript对象

var foo = bar('api.php?x=y'); 

函数应该将查询字符串作为参数,服务器将数据作为JSON返回。

你能告诉我如何使用jQuery做到这一点,你有任何想法/例子吗?

我会扩大我的问题,因为它似乎我做的都是错的。我想创建一个基于实时数据(股票报价)的Web应用程序,所以它必须不断地向服务器请求更新的信息。当应用程序初始化时,第一步是获取要包含的股票的静态数据(例如股票代码和发行者),我认为最好的方法是在服务器上创建一个数据库,查询并以JSON形式返回选定的股票数据。下一步是向服务器上的另一个API发出请求,该请求返回所选股票的实时数据(如价格和交易量),当完整数据返回时,它将使用模板引擎呈现为html。然后,应用程序必须在某个时间间隔内不断调用第二个API来更新实时数据并再次呈现。你也应该能够做出新的股票选择并重新开始这个过程。

我认为像这样构建应用程序的最佳方式是将数据放在自定义对象中,该对象具有自己的方法来稍后修改数据(例如排序和筛选),因此如果foo是我的对象股票数据我可以做类似foo.sort()或类似foo.render()的东西来创建数据的html表示。这就是为什么我认为最好的方法是从AJAX调用返回的数据中创建一个对象。 您能否告诉我这是否构建这样的应用程序的正确方式,或者将我指向正确的方向?

感谢

+2

有jQuery的DOCO此页面上的例子:http://api.jquery.com/jQuery.getJSON/ - 看到其他的jQuery的Ajax功能的更多信息。请注意,调用函数来获取数据的想法对于异步Ajax调用来说不太合适,但您可以解决它。 – nnnnnn 2012-02-25 04:09:16

+3

这听起来很像[您刚才的问题(http://stackoverflow.com/questions/9271573/creating-custom-javascript-object-from-data-returned-by-jquery-ajax-request) – 2012-02-25 04:14:20

回答

5

如果JSON字符串就是服务器响应,很容易将它转变成只用JS对象...

var resp_object = JSON.parse(response); 
+4

你不”即使需要这样做,假设使用jQuery(根据问题的标签),因为jQuery Ajax方法自动解析JSON。 – nnnnnn 2012-02-25 04:29:56

6

AJAX是异步的定义,所以它不”特别适合你的问题。我会建议使用jQuery.ajax(see reference)有一个回调来代替:

$.ajax({ 
    url: 'api.php?x=y', 
    dataType: 'json', 
    success: function (foo) { 
    // Do stuff here using 'foo' 
    } 
}); 
+1

查看API参考资料以获取更多信息:http://api.jquery.com/jQuery.ajax/ – JulioC 2012-02-25 04:15:55

+0

@JulioC新增,谢谢。 – 2012-02-25 04:18:07

+1

*按定义*,AJAX是异步的。不对。它*可以*被同步执行。这就是为什么AJAX是一个不好的首字母缩写词。 XHR(XmlHTTPRequest)是一个更好的缩写词。另请参见:https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest – KooiInc 2012-02-29 06:32:31

4

你在你的方法同步思考。

这意味着,你认为你的函数调用“栏(‘api.php?X = Y’)”应立即返回检索到的数据/对象。这有一个缺点,即在等待答案时,浏览器中的代码执行被阻止。

为了解决这个问题,您需要创建一个异步回调处理程序(使用"jQuery.ajax"时的“成功”处理程序),正如user595228之前指出的那样。呈现返回信息的代码将进入该处理程序。

对于问题如何组织代码,它取决于你的数据的复杂程度和频率,你使用它在你的应用程序。如果它的复杂,在多个地方被使用,它可能是有意义的创建与辅助函数的数据对象,以避免重复代码,并把有关数据代码在一个地方。如果你只在一个地方渲染它们,而你所做的唯一事情就是简单的排序和显示,那么我会将这个逻辑放在一个简单的函数中,以减少复杂性。

0

您可以创建一个jQuery插件和勾你的对象之中。例如:

var foo = tablesort({}); // tablesort is plugin Jquery 
foo.sort(); 

你需要实现的jQuery插件排序方法,它的意思是:用ajax从服务器获取数据,并填写对象的属性或者做一些

0

是对实时数据被推到你?那么我的意思是,如果你现在没有听到数据,那么数据就会通过你想要的线路传出去呢?还是它建立在一个队列中等待你轮询它并得到它?

如果你有第一种情况下,你可以有你的服务器从股票服务中获得的数据和队列为你 - 这带来了质疑,你如何处理多个用户的队列。或者,您可以设置websocket(所有浏览器中都不支持HTML5)或查看彗星解决方案(可能涉及Flash对象或大量快速轮询)。

如果有情况二号,那么你可以使用Ajax抢上可用的定时器的数据块。您需要使用ajax的异步方面,否则您的屏幕可能会冻结并等待响应。使用类似jquery的东西来帮助你完成这个过程 - 不需要重新发明轮子。

0

我通常喜欢以保持数据的呈现,从数据本身分开。从服务器接收对象后,我建议不要将函数添加到对象中,而是建议传递数据对象。

例子:

function renderStockData(data) { 
    // build and return HTML from data 
} 

function loadStockData(url, callback) { 
    $.ajax({ 
    url: url, 
    dataType: 'json', 
    success: callback 
    }); 
} 

// Later that day... 
loadStockData('api?stock=GOOG', function (data) { 
    var renderedHtml = renderStockData(data); 
    // ... 
}); 

这是建议,你要寻找的类型?

相关问题