2016-07-05 43 views
0

我使用HTML5地理位置检索用户纬度/经度,并想将其返回到该服务器将与之比较的店铺纬度/ LNGS COORDS和返回列表最近的五个。 地理位置API是没有问题的,在所有返回的纬度/经度cooridinates客户端,我不能找到一种方法,在同一时间返回到服务器的信息并呈现了新的一页。 我已经使用$ .POST方法尝试,在安装到COORDS数据:对象。发送HTML5地理位置结果反馈给节点/ Express服务器

客户端的JavaScript

function sendToServer(lat,lng){ 
    $.ajax({ 
      type: "POST", 
      url: "/search", 
      data: {lat: lat, lng: lng}, 
      success: function(data){ 
       alert('Successful'); 
      }, 
    }); 
} 

我可以从电话的console.log服务器端的COORDS正在顺利通过看。 server.js

app.post('/search', function(req,res){ 
    console.log(req.body);       <-- does show lat/lng coords 
    res.render('./pages/search' , { 
      shops: coords.getNearestFive(req.body)  <-- just to give idea 
    }); 
}); 

我只通过商店与渲染,给你什么,我打算用数据来一个想法对象,我没有试过呢。

'./pages/search'不会呈现给客户端,我已阅读其他帖子,建议使用$ .ajax不是一个很好的方法来尝试和执行此操作,但我找不到解决方案。我已经使用“GET”方法试过,但我不能检索纬度/经度COORDS从服务器端,即使页面不正确加载。 奇怪的是我一直在使用谷歌网络工具检查请求/响应和repsonse确实显示渲染“./pages/search”,这不是反映在浏览器虽然。

这是我的锚,作为一个按钮的作用是让COORDS

<a href="/search" class="geoSearch"> Find My Location! </a> 

有谁知道,我怎么会通过,并获得坐标,以及能够加载所选择的页面?由于

**** ****更新

我设法通过在setTimeout函数使用req.query和包裹res.render()调用来获取纬度/经度细节了从服务器端这确实感觉很尴尬。

app.get('/search', function(req,res){ 
    console.log(req.query);    <-- logs passed lat/lng 
    res.render('./pages/search'); 
}); 

客户方单击处理

$('.geoSearch').on('click', function(){ 
    getCoords(); 
}); 

客户方Ajax请求

function sendToServer(lat,lng){ 
    $.ajax({ 
      type: "GET", 
      url: "/search", 
      contentType: "application/json", 
      data: JSON.stringify({lat: lat, lng: lng}), 
      success: function(data){ 
       alert('Successful'); 
      }, 
    }); 
} 

Serverside集团

app.get('/search', function(req,res){ 
    var beQuick = req.query; 
    console.log(beQuick); 
    setTimeout(function(){    
      res.render('./pages/search'); 
    },1000); 
}); 

是否有允许req.query更好的方式来填补变量服务器端没有h在渲染新页面时通过setTimeout添加延迟?谢谢

回答

0

如果有其他人有这种类型的问题,我已经找到一个相对简单的方法来使用websockets来回传递数据。 要做到这一点,你需要socket.io作为您的项目的依赖和一些额外的代码。

Serverside集团JS

//allow socket IO to latch onto HTTP server 
var server = http.createServer(NYise); 
var io = require('socket.io').listen(server); 

//reacts to an event emitted on the client side 
io.on('connection', function(socket){ 
    socket.on('coords', function(yourDataPassed){ 
      //whatever you intened to do with your data 
    }); 
}); 

客户方JS

<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script> 


    //emit back to server <-- my code is held in another function. 
    var socket = io(); 
    socket.emit('coords', {lat: lat, lng: lng}); 

我的代码在不同的功能保持,从而可能看起来混乱。有关更多信息,请参阅SocketIO文档 - http://socket.io/docs/