Member 12300036 Ответов: 1

Показать текущее местоположение android устройства на карте Google после отправки уведомления puish на android


проблема заключается в том, что при нажатии кнопки submit выполняются два метода...первый-контроллером, который отправляет уведомление на android. второй - с помощью функции onclcik javascript, в которой с помощью ajax мы вызываем метод, который показывает нам широту и долготу и показывает их на карте google.
теперь он выполняет первую функцию javascript, а затем отправляет push-уведомление. затем перезагрузите всю страницу. таким образом, карта приходила и уходила по мере загрузки страницы после выполнения функции javascript.

Что я уже пробовал:

в контроллере:

public ActionResult getcurrentlocation()
{

возвращение смотреть();
}


[HttpPost]

public ActionResult getcurrentlocation(FormCollection fc)
{
строка eid = fc ["EmployeeCode"];
строка empid = geteid(eid);
SendNotification(empid, " получить текущее местоположение");

возвращение смотреть();
}
общественного недействительными файл sendnotification(строку идентификатора устройства, строку сообщения)
{
// API-ключ, созданный в проекте Google
строка GoogleAppID = " AIzaSyDBhaDX8sCD9gZOgBA_3vZS4apA1oax_rg";
// Идентификатор проекта, созданный в Google project
var SENDER_ID = ";
//Регистрационный номер создано Android-приложение, т. е. идентификатора устройства
строка regID = deviceId.Отделка();
Servicepointmanager и.ServerCertificateValidationCallback = новый
RemoteCertificateValidationCallback
(
делегат { возвратите True; }
);
Запросы WebRequest запросы WebRequest ;
webRequest = WebRequest.Создать("https://android.googleapis.com/gcm/send");
веб-запрос.Method = " post";
веб-запрос.ContentType = " application/x-www-form-urlencoded;charset=UTF-8";
веб-запрос.Заголовки.Добавить (string.Формат ("Authorization: key={0}", GoogleAppID));
веб-запрос.Заголовки.Добавить (string.Формат ("Sender: id={0}", SENDER_ID));
string postData = строка.Формат("collapse_key=score_update&амп;time_to_live=108&амп;delay_while_idle=0&сбор данных.сообщение={0} &сбор данных.время={1} &амп;ид_регистрации={2}", сообщения, даты и времени.UtcNow, regID, " default");
Byte[] byteArray = Encoding. UTF8.GetBytes(postData);
веб-запрос.ContentLength = byteArray.Длина;
Поток данных поток = запросы WebRequest.Метод getrequeststream();
поток данных.Напишите (byteArray, 0, byteArray.Длина);
поток данных.Закрывать();
Метода webresponse метода webresponse = запросы WebRequest.Творческий();


поток данных = метода webresponse.GetResponseStream();
используя (что streamreader, что streamreader = новый поток streamreader(поток данных))
{
Строка sResponseFromServer = streamReader. ReadToEnd();
что streamreader.Закрывать();
поток данных.Закрывать();
веб-ответ.Закрывать();
}
}

в виду:
<style>#map_canvas { height: 100% }</style>
  <script language="javascript" type="text/javascript">
    
    </script>
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

    <script src="jquery-1.9.1.min.js" type="text/javascript"></script>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
    <script src="../Scripting/UIBlocker.js"></script>
    <script src="../Scripting/spin.js"></script>
  <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=AIzaSyDY0kkJiTPVd2U7aTOAwhc9ySH6oHxOIYM&sensor=false"></script>
  <header class="head">              
                        <h3>Employee Location</h3>                
                    </header>
<div class="row" id="rr">
 
    <div class="col-lg-6">

       @using (Html.BeginForm("getcurrentlocation", "Setup", FormMethod.Post, new { @class = "form-horizontal"}))
        {   
           @Html.HiddenFor(m=>m.Id)
       
    
           <div class="form-group">
                @Html.Label("Employee Code", new { @class = "control-label col-lg-4", })               
                <div class="col-lg-8">  
                @Html.TextBoxFor(m => m.EmployeeCode, new { @class = "form-control",@name = "eid",@id = "emp" , @placeholder = "Enter Employee Code." })
              </div>
                @Html.ValidationMessageFor(m => m.EmployeeCode)
                </div>
         
              
            <div class="col-lg-8">
                <input type="submit" id="Add" value="send request" name="Command"  class="btn btn-metis-6 btn-sm" />

                  
            </div>
           
            <br />         
              
        } </div></div>
 <div class="col-lg-8">
                <input type="submit" id="kk" value="Get current location" name="Command"  onclick="GetEngineerLocation()" class="btn btn-metis-6 btn-sm" />

                  
            </div>

      <div id="map_canvas" style="width: 500px; height: 400px;"></div>
                    <div id="foo">
                    </div>
 



  <div class="col-lg-12">
      
 
</div>

function GetEngineerLocation() {

    //var empId = document.getElementById('ddlEmployeelist').value;
   var callId = document.getElementById('emp').value;

    if (callId == undefined || callId == '') {

        callId = -1;
    }
    if (callId != '') {

        $.ajax({

            type: "Post",
            url: "/MobileApp/Setup/currentlocation",
            dataType: 'json',
            data: JSON.stringify({ callId: callId }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
          success: GetEngineerCurrentLocationSuccess,
           
            error: GetEngineerCurrentLocationFail
        });
    }
    else {
        alert("Please select employeee")
    }
}

function GetEngineerCurrentLocationSuccess(result) {

    var lat = result.Latitude;
    var lon = result.Longitude;
    var time = result.LocationTime;

    var myLatlng = new google.maps.LatLng(lat, lon) // This is used to center the map to show our markers
    var mapOptions = {
        center: myLatlng,
        zoom: 6,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        marker: true
    };
    var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
    var marker = new google.maps.Marker({
        position: myLatlng,
        title: "lat: " + lat + " long: " + lon + " Time: " + time
    });
    marker.setMap(map);
    var infowindow = new google.maps.InfoWindow({ content: "<b>User Address</b><br/> Latitude:" + lat + "<br /> Longitude:" + lon + "" });
    infowindow.open(map, marker);


}

function GetEngineerCurrentLocationFail() {
    alert("fail");

}

1 Ответов

Рейтинг:
1

Richard Deeming

Вы забыли отменить отправку формы, когда нажали кнопку" получить текущее местоположение".:

<input type="submit" id="kk" value="Get current location" name="Command"  onclick="GetEngineerLocation();return false;" class="btn btn-metis-6 btn-sm" />

Добавление return false; после звонка в GetEngineerLocation(); предотвращает отправку формы.


Member 12300036

большое спасибо, сэр...
но передо мной стоит еще одна проблема. когда я нажимаю на кнопку Отправить, выполняется метод действия контроллера. в котором мы отправляем push-уведомление на android и получаем местоположение.
bt получение местоположения занимает не менее 5 секунд. таким образом, функция java script выполняется быстро, и она показывает последнее местоположение на карте из базы данных.
можем ли мы задержать выполнение функции javascript через какую-то секунду или любое другое решение для этого??

Member 12300036

и после добавления возврата false в функцию javascript.... метод контроллера не выполняется. так как же я отправляю уведомление дорогой

Richard Deeming

Либо вы отправляете форму, и в этом случае вся страница перезагружается, либо вы запускаете какой-то Javascript. Вы не можете сделать оба.

Если вам нужно выполнить Javascript и выполните какой-нибудь код на сервере, а затем вам нужно будет использовать AJAX-запрос вместо отправки формы.

Member 12300036

хорошо спасибо