jquery:制作按钮click&json调用一起工作,但保持它们分离
jquery: making button.click & json call work together but keeping them separated
我有一个联系人表单,可以加密表单消息:
<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',函数(响应){…})但这不是我想要的
如果ipinfo查询出现问题,则其他任何东西都不起作用-确切地说是,因为都在$.get('http://ipinfo.io',函数(响应){…})。
换句话说:我如何让我的button.click和$.GET-JSON调用一起工作,这样脚本就可以工作,但要将它们分开(JSON outer button.clink),这样,如果JSON调用由于某种原因失败,按钮单击函数和其中的所有功能仍然可以工作?
我已经在Javascript中标记了JSON调用的结果应该附加到表单消息的位置。
谢谢你的帮助。
编辑:
经过10亿小时的试验&错误,我最终偶然发现了一种使其工作的方法:
因此,我将geoapinfo查询放入一个单独的脚本中,该脚本在加载页面时获取信息。
$.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;
});
然后在我之前发布的另一个脚本中,我通过将变量$geoapinfo添加到表单消息中
document.form_contact.message.value=document.form_contact.message.value + §geoipinfo;
$geoapinfo现在似乎是一个全局变量,因此我可以在函数外和其他脚本中使用它的内容。
我真的不在乎它是否有效,但也许有人可以告诉我这个解决方案是否符合javascript规则。
jQuery API:http://api.jquery.com/jQuery.get/
指定可以在.always()中放入一个处理程序,无论get成功还是失败,都会调用它。
$.get('http://ipinfo.io', , function(response)
{
$("#message").val( $("#message").val() + "'n'n" + "IP: "+ response.ip + "'n" + "Location: " + response.city + ", " + response.country);
}, 'jsonp').always(function(){
document.form_contact.message.value=''n'n'+doEncrypt(keyid, keytyp, pubkey, document.form_contact.message.value);
});
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- document.title函数可以't设置它与php一起工作
- :focus:一起活跃,不在firefox上工作
- Javascript无法与Onsen一起在Cordova工作
- "此网站似乎使用滚动链接定位效果.这可能不能很好地与异步平移一起工作;
- 有没有办法把它们串在一起,这样它们基本上可以同时工作
- 非常简单的js测试;Don’不要和Minko一起工作
- 无法使我的文本参数与我的查询一起工作
- 为什么Angularjs验证don't与输入[type=“number”]一起工作
- 无法使vash 0.8.0与express 4.12.3一起工作
- 如何使Angular JS控制器与指令一起工作
- 无法使autocompletion与bootstrap和php代码点火器一起工作
- 注入的元素和jQuery脚本.如何让他们一起工作
- 安全地包装JS文件,这样当它们连接在一起时,它们仍然可以工作
- 两个独立工作的javascript函数,但不能一起工作
- 角度和砖石一起工作
- Node http-proxy-middleware 不能与本地服务器一起工作
- 我需要在单击时运行两个函数.即使嵌套在一起,我也无法让它们都工作
- jQuery脚本不想一起工作
- page.js使examples/hash与hashbang:true一起工作