我正在实施一个小功能并且卡住了。
我有一个按钮来执行某些操作,例如
<input type="submit" value="My Button" onclick="javascript:DoSomething();" />
当用户点击按钮时,会调用DoSomething函数。
function DoSomething()
{
var geocoder = new GClientGeocoder();
geocoder.getLocations(map.getCenter(), function SetField(response)
{
if (!response || response.Status.code != 200)
{
alert("Status Code:" + response.Status.code);
}
else
{
var place = response.Placemark[0];
$('#someHiddenField')[0].value = place.AddressDetails.Country.CountryNameCode;
}
});
}
在函数内部定义了一个回调函数,该函数执行异步操作,在表单字段中写入城市名称。问题是异步回调将在页面发布后尝试在字段中写入。有没有我可以让后期处理等待回调结果?回调是在Google Maps API中定义的,我无法避免。
提前致谢
答案 0 :(得分:1)
首先,您要修改onclick处理程序代码以包含类似的返回语句:
<input type="submit" value="My Button" onclick="javascript:return DoSomething();" />
然后修改DoSomething函数以返回false,以便在它处理异步回调时取消sumit。并修改异步回调以在完成后发布表单。
function DoSomething(doPost)
{
var geocoder = new GClientGeocoder();
geocoder.getLocations(map.getCenter(), function SetField(response)
{
if (!response || response.Status.code != 200)
{
alert("Status Code:" + response.Status.code);
}
else
{
var place = response.Placemark[0];
$('#someHiddenField')[0].value = place.AddressDetails.Country.CountryNameCode;
// resubmit the form here
$('#yourFormID').submit();
}
});
return false; // cancel the submitting of the form
}
另一种方法是在表单上包含 onSubmit处理程序 ,并使用全局标志来确定是否允许提交表单(即,是否存在没有异步回调仍然在飞行中)。当异步回调返回时,您将清除该标志并重新提交javascript,如上所示,在 表单上调用 submit()方法 元件 强>
答案 1 :(得分:0)
使用常规按钮(type =“button”)代替提交按钮,以便不发布表单。改为从回调函数发布表单。