0

我对以下代码有同样的问题:

function getpgisdata() {
    sdata = ads.d;
    var send = $.post("csqcity.php", { variable:sdata }, function pgisquery(data) {
          alert("success");
       })
         .success(function() { alert("second success"); })
         .error(function() { alert("error"); })
         .complete(function() { alert("complete"); });
    send.complete(function(){ alert("second complete");
});

该函数由以下方式调用:

<div class="wrapSearch">
    <div>
        <input id="searchTextField" type="text" size="50" placeholder="Enter an address...">
        <input type="submit" name="search" id="search1" onclick="getpgisdata()">
    </div>
 <div class="listWrap" id="listWrap1">
    <ul class="searchList" id="searchList1">
    </ul>
 </div>

错误是:使用 Firebug

 TypeError: this is undefined

...n!a?l:Sd(this.lat(),a.lat())&&Sd(this.lng(),a.lng())};P[H].equals=P[H].b;P[H].la...
{main,places}.js (line 11)

与谷歌

Uncaught TypeError: Cannot call method 'lat' of undefined
                                                                %7Bmain,places%7D.js:11 

csqcity.php 包含:

index.html 中引用了以下库:

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=places"></script>
<link rel="stylesheet" type="text/css" href="http://dev.openlayers.org/releases/OpenLayers-2.12/theme/default/style.css"/>
<link rel="stylesheet" type="text/css" href="http://dev.openlayers.org/releases/OpenLayers-2.12/examples/style.css"/>
<script type="text/javascript" src="http://dev.openlayers.org/releases/OpenLayers-2.12/OpenLayers.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js"></script>

我还有另外 2 个功能。一个是 Google Autocompleter,另一个绘制 Openlayers 地图。该错误与谷歌库有关,因此我还附上了自动完成器代码:

function initialize() {
    input = document.getElementById('searchTextField');
    var options = {
        componentRestrictions: {country: 'us'},
        //componentrestrictions: {administrative_area2: 'tx'}
    };
    autocomplete = new google.maps.places.Autocomplete(input, options);
    google.maps.event.addListener(autocomplete, 'place_changed', function() {
      //var place = autocomplete.getPlace();
      var place = autocomplete.getPlace();
      ads.d = place.geometry.location;
    });
  }
  google.maps.event.addDomListener(window, 'load', initialize);

有人有什么想法吗?先感谢您!

4

1 回答 1

0

在我检查了“this”值之后,我设法让代码工作。在我的代码中,这是 DOM 文档。因此,首先,我将 $.post 包含在触发它的 HTML 输入提交元素中,以将 this 作为 HTML 输入,并使用自动完成器的关联输入文本的值。我犯的另一个错误是将所需的数据存储在全局变量中,这触发了“这是未定义的”错误。所以我调用了与 HTML 输入提交相关的 HTML 输入文本(在我的例子中就是这样)。

函数的代码变成了:

  $(document).ready(function () {
      $('#search1').click(function(){
           sdata = $('#searchTextField').val();
        if( sdata == undefined || sdata == 'Enter an address...' || sdata < 4 ){
        alert('Please insert or choose an address to proceed.');
        } else {
      $.post(
            'csqcity.php',
            { 'variable' : sdata },
            function( r_data ){
                alert(r_data);
            }       
        );
        }
      });
  });

$.post 成功了!

感谢您的建议!他们帮助我理解了这个问题。

于 2013-01-19T15:04:49.683 回答