![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 芋頭 ![]()
![]() |
我在前端寫了一個function -->會迴圈去呼叫google map API 計算兩點的行駛里程(因為不只一個案件需要計算) , 每一次計算完成後 , 會呼叫ajax把算完的資料寫入後端 , 所以假設有50筆要算里程 , 就會ajax呼叫50次 , 測試google跑了50次 , 但是ajax後端該處理的卻只有10次 , 請問這個需要怎麼解決? 謝謝~~ |
1樓 |
測試google跑了50次 , 但是ajax後端該處理的卻只有10次 這應該是Google API的限制 每秒最多10次的要求 您可以修改您的程式,每10次後,休息1秒,然後再下個10次 這樣試試看 詳細請參考Google API的說明 https://developers.google.com/analytics/devguides/config/mgmt/v3/limits-quotas
本篇文章回覆於2019-10-03 09:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
2樓
作者回應
芋頭 ![]() |
原來如此 學習了
另外再請教 呼叫GOOGLE API試非同步的方式 , 能否改設為同步的方式呢?? 謝謝
本篇文章回覆於2019-10-04 17:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
3樓
作者回應
芋頭 ![]() |
程式碼如下 請問要如何調整
謝謝~~ 我測試程式的順序會是 156234 ,但是我想要的是123456阿 >< function beg() { { var i = 0; var Arr1 = new Array(); var Arr2 = new Array(); var Arr3 = new Array(); Arr1 = $("#txt1").val().split(','); Arr2 = $("#txt2").val().split(','); Arr3 = $("#txt3").val().split(','); var ret = setInterval(function () { if (Arr1[i].toString() != "" && Arr1[i].toString().length==10) { var request = { origin: Arr2[i], destination: Arr3[i], travelMode: google.maps.DirectionsTravelMode.DRIVING }; //宣告 var dist = 0; var status =""; var strTmp = ""; var directionsService = new google.maps.DirectionsService(); console.log("1"); directionsService.route(request, function (response, status) { console.log("2"); if (status == google.maps.DirectionsStatus.OK) { var route = response.routes[0]; for (var j = 0; j < route.legs.length; j++) { var routeSegment = j + 1; strTmp += route.legs[j].distance.text; } //取得距離(公里) dist = 0; dist = parseFloat(parseFloat(strTmp)).toString(); } console.log("3"); $.ajax( { .............................. } ); console.log("4"); }) console.log("5"); i++; console.log("6"); } else { clearInterval(ret); } }, 1000); } }
本篇文章回覆於2019-10-04 18:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
4樓 |
Ajax屬於『非同步』
他是同時有好幾條線,『同時』對Server發出要求 哪個先得到回來,應該都不一定 (每次的順序可能都不同) 如果您非要以123456的順序 則要考慮使用『同步』的方式,也就是『循序執行』的方式 一個做完,取得結果,在執行下一個 速度上會有差,您再思考看看
本篇文章回覆於2019-10-07 09:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
5樓
最有價值解答
topcat ![]() ![]() |
好奇問一下
為何非要123456的順序? 有什麼特別的需求非要這樣的順序嗎? 在還不知道您的需求前,假設,是為了呈現資料的順序 如果要求的時候,傳個序號過去,回傳的時候也可以取得傳過去的序號 在呈現的時候,自己在從資料庫取資料時進行序號的排序,這樣是否會更符合需求? ^.^a
本篇文章回覆於2019-10-07 09:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
6樓
作者回應
芋頭 ![]() |
請問各位高手 .我這樣的架構會有問題嗎?(因為都是非同步,怕會更新錯亂)
1.先一次把所有要計算行駛距離的資料依次抓回來(假設1000筆) 2.迴圈呼叫function(Distance)去google取得距離 3.取得距離後再利用Datakey對應把資料ajax回寫後端table 謝謝指導 $(function () { GetProcessData(); }); function GetProcessData() { //先ajax去後端把所有要計算行駛距離的資料依次抓回來 $.ajax({ type: "POST", //POST方法 contentType: "application/json; charset=utf-8", url: "test.asmx/GetProcessData", async: false, dataType: "json", data: "", success: function(data) { //完成時 var jsonObject = jQuery.parseJSON(data.d); //把每一筆資料一個一個傳入Distance去google取得行駛距離 for (i = 0; i < jsonObject.length; i++) { setTimeout(function() { Distance(Datakey,start,end)//傳入開始的地址跟結束的地址 }, 3000); } }, error: function() { alert("error"); } //錯誤時 }); } function Distance(Datakey,start,end) { var request = { origin: start, destination: end, travelMode: google.maps.DirectionsTravelMode.DRIVING }; //宣告 var directionsService = new google.maps.DirectionsService(); ... directionsService.route(request, function (response, status) { .... if (status == google.maps.DirectionsStatus.OK) { ........ //取得距離(正整數,公尺)後再ajax 把距離回寫後端TABLE var dist = parseInt(parseFloat(strTmp) * 1000).toString(); $.ajax({ type: "POST", //POST方法 contentType: "application/json; charset=utf-8", url: "test.asmx/InsertData", async: false, dataType: "json", data: "{mykey:'" + Datakey + "',mDistance:'" + dist + "'}", success: function(data) { //完成時 ... } }, error: function() { alert("error"); } //錯誤時 } }); }
本篇文章回覆於2020-09-16 10:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |