2013-02-17 3 views
1

Это мой HTML код:Форма данных не получает набор

<html> 
    <head> 
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">   
     </script> 

     <script> 
      function getCords(){ 
       var x=document.forms["get_loc"]["loc"].value; 
       var y=x.replace(" ","+"); 
       $.getJSON("http://maps.google.com/maps/geo?q=%22"+y+"%22&key=%22My_Google_API_Key%22&sensor=false&output=json", 
        function(data, textStatus){ 
         //alert(data.Placemark[0].Point.coordinates[0]); 
         //document.getElementById("MyDiv").innerHTML=data.Placemark[0].Point.coordinates[0] 
         $("#lon").val(data.Placemark[0].Point.coordinates[1]); 
         $("#lat").val(data.Placemark[0].Point.coordinates[0]); 
        console.log(data); 
       }); 
      return true;    
      } 
     </script> 

    </head> 

    <body> 
     <form name="get_loc" id="get_loc" action="get_loc.php" onsubmit="return getCords()" method="post"> 
     Location: <input type="text" name="loc" id="loc"/></br> 
     <input type="hidden" name="lat" id="lat" value="0"/> 
     <input type="hidden" name="lon" id="lon" value="0"/> 
     <input type="submit" value="Submit" id="submit_button"/></br> 
     </form> 
    </body> 
</html> 

Теперь, что я пытаюсь сделать, это получить координаты местоположения с помощью этой функции и передать его в отдельный PHP-файл для некоторые действия с базой данных. Но когда я пытаюсь получить значения, напечатанные в файле PHP, широта и долгота оба по-прежнему появляются как 0.

Что здесь не так?

P: S: При возврате ложных данных и контроле, это дает мне правильную Широта. Так что это не ошибка API Google.

+0

'<сценарий SRC =" HTTP: // ajax.' попробуйте добавить протокол 'HTTP: или https:' – Jai

+0

@Jai Никакой помощи На самом деле я не взял. этот URL-адрес из рабочего скрипта.Так что я даже не хочу смотреть на него. Функция оповещения дает мне правильную широту. Значит, все работает, за исключением того, что значение формы не задано. – Abhishek

ответ

0

Вещь с предоставлением формы таким образом такова: вы вызываете функцию javascript в тот момент, когда вы отправляете форму. Это не отменяет действительную форму submit, а функция javascript (Async) не имеет времени для установки полей. Страница уже давно прошла до завершения асинхронного запроса.

К счастью, вы можете отменить оригинальное событие и после получения результатов api отправить форму. Не забывайте, что это может занять некоторое время, и пользователь ничего не знает о происходящем, дайте им знать, что происходит, показывая какой-то «загрузчик».

Кроме того, отделите html от javascript, используя событие jQuery submit. Вот как это будет работать:

<html> 
<head> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">   
    </script> 

    <script> 
     function getCords(event){ 

      event.preventDefault(); 
      var callingForm = $(this);     
      var location = callingForm.find("#loc").val(); 
       location = location.replace(" ","+"); 
      $.getJSON("http://maps.google.com/maps/geo?q=%22"+y+"%22&key=%22My_Google_API_Key%22&sensor=false&output=json", 
       function(data, textStatus){ 
        //alert(data.Placemark[0].Point.coordinates[0]); 
        //document.getElementById("MyDiv").innerHTML=data.Placemark[0].Point.coordinates[0] 
        $("#lon").val(data.Placemark[0].Point.coordinates[1]); 
        $("#lat").val(data.Placemark[0].Point.coordinates[0]); 
       console.log(data); 
       callingForm.submit(); 
      }); 
     return false;    
     } 
     $(".jsFormSubmit").submit(getCords); 


    </script> 

</head> 

<body> 
    <form name="get_loc" id="get_loc" class="jsFormSubmit" action="get_loc.php" method="post"> 
    Location: <input type="text" name="loc" id="loc"/></br> 
    <input type="hidden" name="lat" id="lat" value="0"/> 
    <input type="hidden" name="lon" id="lon" value="0"/> 
    <input type="submit" value="Submit" id="submit_button"/></br> 
    </form> 
</body> 

+0

Его по-прежнему не получают. – Abhishek

+0

Если вы обменяете callForm.submit(), для callForm [0]. Отправить() ; он должен работать. –

+0

На самом деле, у меня есть работа. Поскольку данные были небольшими, я перенаправил ссылку, заполняющую значения, и получение на другом конце с помощью $ _GET :) – Abhishek

0

Две вещи в значительной степени обречены на то, что вы пытаетесь сделать. Вы не можете использовать ajax для Google, перекрестные ограничения безопасности домена. И «ваш ключ google api» не будет работать. Клиентский браузер должен быть только вами или человеком с собственным ключом, который хочет его использовать.

+0

Но предупреждение дает мне правильная широта.Согласно, что работает google API.Я думаю, что проблема заключается в настройке скрытых полей в форме. – Abhishek

Смежные вопросы