AJAX调用从<;身体>;但不是来自Javascript函数


AJAX call working from <body> but not from Javascript function

因此,我目前遇到的问题是,我试图使用ajax调用将信息发送到php页面,以便在SQL数据库中创建条目。

如果我在标签中有代码。(所以它不在函数中,它只是在页面加载时调用)。

这就是导入的内容:

<script type="text/javascript" language="javascript" src="js/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="js/cordova.js"></script>
<link rel="stylesheet" href="jquery.mobile-1.3.0.css" />
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=visualization"></script>
<script type="text/javascript">
var pos = "(44.18974214877667,-79.63154019848633)";
var place = "test";
var check = "on";
var priv = "yes";
$.ajax({ type:"POST",
         url:"backMap/locationCreation.php",
         data: { name: place, loc: pos, check: check, privacy: priv },
         success: function(data) { $("#awesomet").html(data);},
         error: function(xhr, textStatus, thrownError, data) {
                alert("Error: " + thrownError); }
});
</script>

当在页面加载时调用它时,它将正确运行并将信息输入数据库。问题是,我希望在调用按钮时发生这种情况,以便用户可以输入信息。

<button onClick="sendCreationRequest()" />Submit</button>
<script type="text/javascript">

function sendCreationRequest() {
   var place = $("#place").val();
   var pos = targetted.getPosition();
   var check = $("#checker").val();
   var priv = $("#privOp").val();
   $("#awesomet").html("GOT HERE.");
   $.ajax({ type:"POST",
         url:"backMap/locationCreation.php",
         data: { name: place, loc: pos, check: check, privacy: priv },
         success: function(data) { $("#awesomet").html(data);},
         error: function(xhr, textStatus, thrownError, data) {
        alert("Error: " + thrownError); }
   });
}
</script>

因此,当按下一个按钮时,Awesometdiv将更改为"GOT HERE",该按钮将激活该功能,从而进入该功能。我还收到了所有变量的警报,它们都是正确的。

当点击按钮时,控制台中会出现以下内容:

CordovaLog - https://maps.gstatic.com/cat_js/intl/en_ca/mapfiles/api-3/13/4/%7Bmain,visualization%7D.js: Line 12 : Uncaught TypeError: Cannot call method 'lat' of undefined
Web Console - Uncaught TypeError: Cannot call method 'lat' of undefined:12.

我到处找我称之为这个的地方,但我找不到。

我不明白为什么它能在页面加载调用中工作,为什么它不能在函数调用中工作。

编辑:Targeted是一个谷歌地图标记。当调用获取位置的调用时。它的回报很好。我已发出警报(pos);在代码中,因此当按下按钮时,警报确实会出现正确的字符串。

编辑:好的,所以我更改了:

var pos = targetted.getPosition();

到。。。

var pos = "(44.18974214877667,-79.63154019848633)";

函数调用现在可以完美工作了!但是我不明白为什么。他们在变量中得到了相同的数字。有什么想法吗?

只是为了回答我自己的问题。

感谢bystwn22和Mansimran Singh。

问题似乎与targeted.getPosition()有关;

targeted是谷歌地图上的一个Marker。它的getPosition()函数返回一些东西。当使用alert()打印出来时,它看起来是一样的。

事实证明,它实际上不是一个String,而是某种json语句。

修复结果是:

var pos = ""+targetted.getPosition();

简单但有效。

感谢大家的投入!