2012-04-08 55 views
0

我是一种JavaScript的新手,所以我正在寻找一些帮助来创建一种方法来拖放地理编码标记,以允许交互式更改地址。我相信这可以通过更新LOCATION列行来实现。POST请求更新行

执行此操作的第一步是'发送'POST请求,对吧?那么,我想问一下,如果有人能给我一个例子,因为我不知道如何编写这个POST请求并将其放入我的代码中!

回答

2

就必须发布到Fusion Tables的API更新一列,但目前您无法直接使用JavaScript作为Google does not set the CORS headers以允许跨域发布到其API。

所以,如果你想这样做,你必须通过你的网络服务器或类似的东西“传递”你的请求。我使用下面的PHP脚本完成它,然后通过JavaScript将请求发送到我的PHP脚本。最后,你必须authenticate yourself using OAuth

$url = "http://www.google.com/fusiontables/api/query"; 
$relay = new PostRelay($url,$_POST); 
echo $relay->relay(); 

而在PostRelay方法relay()定义类中,$_POST包含所有发布数据(由$this->data在我的类来表示):

public function relay() 
{ 
    $url = $this->getUrl(); 
    $this->curlHandler = curl_init($url); 
    curl_setopt($this->curlHandler, CURLOPT_POST, true); 
    curl_setopt($this->curlHandler, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($this->curlHandler, CURLOPT_TIMEOUT, 30); 
    curl_setopt($this->curlHandler, CURLOPT_FOLLOWLOCATION, 1); 

    if($this->data != null) { 
     curl_setopt($this->curlHandler, CURLOPT_POSTFIELDS, $this->getData()); 
    } 

    $remote_answer = curl_exec($this->curlHandler); 

    if(curl_errno($this->curlHandler) != 0) { 
     $msgErrorNo = "cURL Errornumber: ".curl_errno($this->curlHandler); 
     $msgError = "cURL Error: ".curl_error($this->curlHandler); 
     throw new RemoteException($url,$msgErrorNo." ".$msgError); 
    } 
    return $remote_answer; 
} 
+0

嘿斯蒂芬,你能告诉我们这里可以做些什么: – 2012-04-10 02:22:39

+0

你对“这里”有什么意思?我可以告诉你如何使用我的代码片段。 – Odi 2012-04-10 05:50:57

+0

好吧,我明白了,您的意思是您的示例代码如下。这很好地显示您的数据。现在,如果您想要将数据发送到Fusion Tables,则必须在两者之间使用网络服务器,因为Google尚未(但?)允许从JavaScript直接发送POST请求到其API。在你的web服务器上设置我的PHP脚本,并发送POST请求到这个脚本。在jQuery中,您可以使用$ .post(url-to-php-script,success-function)来实现此目的。 – Odi 2012-04-10 06:25:55

-1

看一看jQuery Ajax

示例(假设驻留在名为Ajax的网页根文件夹中的.NET Web服务):

var Params = "{'myParamName': 'myParamValue'}"; 

$.ajax({ 
     type: "POST", 
     url: "Ajax/MyWebService.asmx/MyWSMethod", 
     data: Params, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (response) { 
      // Handle the response here as you need to... 
     }, 
     failure: function() { 
      // Handle failure if needed 
     } 
    }); 
+0

你揍得很快进入? – Ryan 2012-04-08 02:06:44

+0

是啊 - 必须走开一会儿 – 2012-04-08 02:11:12

0
<!DOCTYPE html> 
<html> 
<head> 
<style> 
#map_canvas { width: 600px;height: 550px; } 
</style> 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"type="text/javascript"></script> 
<script type="text/javascript"src="http://maps.google.com/maps/api/js?sensor=false"> 
</script> 
<script type="text/javascript"> 
var map; 

var layer; 
var tableid = 3385625; 

function initialize() { 
map = new google.maps.Map(document.getElementById('map_canvas'), { 
center: new google.maps.LatLng(-30.127460619520974, -51.167964935302734), 
zoom: 11, 
mapTypeId: google.maps.MapTypeId.ROADMAP 
}); 

layer = new google.maps.FusionTablesLayer(tableid); 
layer.setQuery("SELECT 'ENDERECO' FROM " + tableid); 
layer.setMap(map); 
} 
//FUNÇÃO PARA ATIVAR OS FILTROS 
function changeMap() { 
var searchString = document.getElementById('search-string').value.replace(/'/g, "\\'"); 
if (!searchString) { 
layer.setQuery("SELECT 'ENDERECO' FROM " + tableid); 
return; 
} 
layer.setQuery("SELECT 'ENDERECO' FROM " + tableid + " WHERE 'TIPO' = '" + searchString + "'"); 
var queryUrlHead = 'http://www.google.com/fusiontables/api/query?sql='; 
var queryUrlTail = '&jsonCallback=?'; 
var query = "SELECT COUNT() FROM " + tableid + " WHERE 'TIPO' CONTAINS IGNORING CASE '" + searchString + "'" 
var queryurl = encodeURI(queryUrlHead + query + queryUrlTail); 
var jqxhr = $.get(queryurl, 
function(data){ 
try{ 
$('#count').html((data.table.rows[0][0])); 
} 
catch(err){ 
$('#count').html('0') 
} 
}, 
"jsonp"); 
} 

</script> 

</head> 
<body onload="initialize();"> 

<div id="map_canvas"></div> 

<div style="margin-top: 10px;"> 
<label>Qual o tipo?</label> 
<select id="search-string" onchange="changeMap(this.value);"> 
<option value="">--Selecionar/Reset--</option> 
<option value="Bar">Bar</option> 
<option value="Comidas variadas">Comidas variadas</option> 
<option value="Espaço de Cultura">Espaço de Cultura</option> 
<option value="Hotel">Hotel</option> 
<option value="Igreja">Igreja</option> 
<option value="Museu">Museu</option> 
<option value="Restaurante">Restaurante</option> 
<option value="Shopping Center">Shopping Center</option> 
<option value="Teatro">Teatro</option> 
</select> 
</div> </br> 
<label>Quantidade:</label> 
<span id='count'></span> 
</body> 
</html>