我有一个加密表单消息的联系表:
<script type="text/javascript" src="jquery-1.10.2.min.js"></script>
<form name="form_contact" method="post" action="/cgi/formmail.pl">
// other input fields here
<textarea name="message" id="message" required></textarea>
<button id="sendbutton" type="submit">Send</button>
</form>
以下 Javascript 脚本工作并处理表单消息:
$(document).ready(function() {
$("button[id$='sendbutton']").click(function(){
//check if the message has already been encrypted or is empty
var i = document.form_contact.message.value.indexOf('-----BEGIN PGP MESSAGE-----');
if((i >= 0) || (document.form_contact.message.value === ''))
{
document.form_contact.submit(); return;
}
else
{
document.form_contact.message.value='\n\n'+ document.form_contact.message.value + "\n\n\n\n\n\n\n\n" + "--------------------------" + "\n"
if (typeof(navigator.language) != undefined && typeof(navigator.language) != null) {
document.form_contact.message.value=document.form_contact.message.value + '\n'+ "Language: " + (navigator.language);}
else if (typeof(navigator.browserLanguage) != undefined && typeof(navigator.browserLanguage) != null) {
document.form_contact.message.value=document.form_contact.message.value + '\n'+ "Language: " + (navigator.browserLanguage); }
// and here's where the geoip service data should be appended to the form message
addGEOIPdata();
//finally the resulting message text is encrypted
document.form_contact.message.value='\n\n'+doEncrypt(keyid, keytyp, pubkey, document.form_contact.message.value);
}
});
});
function addGEOIPdata(){
$.get('http://ipinfo.io', function(response)
{
$("#message").val( $("#message").val() + "\n\n" + "IP: "+ response.ip + "\n" + "Location: " + response.city + ", " + response.country);
}, 'jsonp');
};
好吧,它可以工作,除了:它不会在加密之前将来自 Geoip 服务 ipinfo.io 的响应添加到表单消息中。
我在其他地方看到了一个 jquery JSON 调用示例,该示例将所有代码放在$.get(' http://ipinfo.io ', function(response){...}) 中,但这不是我想要的。
如果 ipinfo 查询出现问题,那么其他任何方法都不会起作用 - 正是因为它都在里面$.get(' http://ipinfo.io ', function(response){...}) 中。
换句话说:我怎样才能使我的 button.click 和我的 $.GET-JSON 调用一起工作,以便脚本可以工作但将它们分开(JSON 外部 button.click),这样如果 JSON 调用由于某种原因失败,则单击按钮功能和其中的一切仍然有效?
我已经在 Javascript 中标记了 JSON 调用的结果应该附加到表单消息的位置。
谢谢您的帮助。
编辑:
经过 10 亿小时的反复试验,我最终偶然发现了一种让它发挥作用的方法:
所以我将 geoipinfo 查询放入一个单独的脚本中,该脚本在页面加载时获取信息。
$.getJSON("https://freegeoip.net/json/", function (location) {
var results = "\n\n" + "IP: "+ location.ip + "\n" + "Location: " + location.city + ", " + location.region_name + ", " + location.country_name;
window.$geoipinfo = results;
});
然后在我之前发布的另一个脚本中,我将变量 $geoipinfo 添加到表单消息中
document.form_contact.message.value=document.form_contact.message.value + §geoipinfo;
$geoipinfo 现在似乎是一个全局变量,因此我可以在函数之外和其他脚本中使用它的内容。
我真的不在乎,只要它有效,但也许有人可以告诉我这个解决方案是否符合 javascript 的规则。