如何在不刷新页面的情况下从服务器获取数据

时间:2014-05-31 04:28:17

标签: java javascript html ajax playframework

我是网络开发的新手。我的工作是从服务器获取数据并使用amcharts每隔1或2秒绘制一次。

这是我到目前为止所做的:

<form id="getdata" role="form" method="post" action=@routes.DataApplication.get_data()>
    <input type="text" name="device" id="device">
    <input type="text" name="type" id="type">
    <button id = "submit" type="submit">Submit</button>
 </form>

输入设备并输入并单击提交按钮后,它将运行Java方法get_data()。该方法将搜索数据库并返回与设备名称匹配的数据,但事物是它将显示另一页面中的数据,例如www.somepage/getdata。上面的html位于www.somepage/data页面。

我尝试使用 jquery .post(),但问题是它需要一个网址,我尝试将/getdata传递给它但是没有用。

我的问题是:有没有办法保存我们从@routes.DataApplication.get_data()操作中获取的数据而无需重新加载页面?

顺便说一下,我正在使用 play 框架来开发网页。

更新

好的,现在做一些进展,我尝试使用ajax帖子,但数据返回(在控制台中)是这样的:

[Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object]

这里我有11个物体。如果我不使用ajax帖子(使用原始的帖子表单方法),我也会获得11个数据点。

这是我的代码:

<script>    
$('#driver').click(function(evt) {
    var dataabc = $('form').serialize();
    console.log(dataabc);
    $('#errors').hide();
    $.ajax({
        type : 'POST',
        data :  dataabc, 
        url : '@routes.DataApplication.get_data()',
        success : function(data) {
            alert("good");
            console.log(data);
        },
        error : function(result) {
            setError('Make call failed');
        }
    });
    return false;
});
</script>

get_data()所做的只是获取用户输入数据(表单)并从数据库和return ok(node);获取相应的数据。此节点为JsonNode

任何帮助将不胜感激..

3 个答案:

答案 0 :(得分:1)

由于您在javascript中获取了一个对象数组,因此它存储在data中。你可以遍历它并显示内容是一些div标签。

实施例: 在成功调用ajax之后创建一个空div来填充数据。

<div id="mytextarea"></div>

然后在你的ajax success中,而不是打印到控制台,你将循环遍历数组并将数据附加到div标签的innerHTML,如此...

var myTextArea = document.getElementById('mytextarea'); for (var x = 0; x < data.length; x++){ myTextArea.innerHTML = myTextArea.innerHTML + data[x].id + '<br/>'; }

编辑1:我看到您了解对象的属性,因此我更新了代码,只将id附加到文本区域。

答案 1 :(得分:0)

告诉我们url返回的确切内容将非常有帮助。通常应该是XML或JSON。 您可以使用FireBug或任何其他开发人员工具来捕获响应并在此处发布。

答案 2 :(得分:0)

IT并不决定要返回什么 - 它就是你!

如果您在get_data()操作中返回实例JSON对象,您的AJAX将收到JSON,请自行检查:

public static Result get_data(){
    ObjectNode node = Json.newObject();
    node.put("hello", "world");
    return ok(node);
}