使用jquery动态包含javascript
我在这里使用IE时遇到了一个问题。我需要在不同服务器和域中的不同网页上插入表单。我是通过javascript实现的,包括:使用jquery动态包含javascript,javascript,jquery,dynamic,include,Javascript,Jquery,Dynamic,Include,我在这里使用IE时遇到了一个问题。我需要在不同服务器和域中的不同网页上插入表单。我是通过javascript实现的,包括: <script type="text/javascript" src="http://www.sisgol.com.br/teste/write_js.php?content=form_content"></script> <div id="form_hypescience"> </div> include将以下内容加载
<script type="text/javascript" src="http://www.sisgol.com.br/teste/write_js.php?content=form_content"></script>
<div id="form_hypescience">
</div>
include将以下内容加载到div中:
$(document).ready(function(){
$('#form_hypescience').html('\
<style>\n\
#form_hypescience {\n\
width: 250px;\n\
height: 250px;\n\
}\n\
#form_hypescience p {\n\
margin: 0;\n\
padding: 0;\n\
}\n\
#form_hypescience label {\n\
font-size: x-small;\n\
display: block;\n\
}\n\
#form_hypescience input[type=text], textarea{\n\
font-size: x-small;\n\
width: 240px;\n\
}\n\
#form_hypescience textarea {\n\
height: 40px;\n\
}\n\
#form_hypescience button {\n\
background:#000000 none repeat scroll 0 0;\n\
border: medium none;\n\
color: #e7e7e7;\n\
padding: 1px;\n\
font-size: 60%;\n\
}\n\
\n\
</style>\n\
\n\
<form class="form_hypescience" method="post" action="<!URL_PROCESS_FORM_DATA!>">\n\
<p>\n\
<label for="nome">Seu Nome</label>\n\
<input type="text" id="nome" name="nome" size="30" />\n\
</p>\n\
<p>\n\
<label for="email">Seu e-mail</label>\n\
<input type="text" id="email" name="email" size="30" />\n\
</p>\n\
<p>\n\
<label for="emails_amigos">E-mail dos seus amigos</label>\n\
<textarea id="emails_amigos" name="emails_amigos" cols="10" rows="3"></textarea>\n\
</p>\n\
<p>\n\
<label for="mensagem">Mensagem</label>\n\
<textarea id="mensagem" name="mensagem" cols="10" rows="3"></textarea>\n\
</p>\n\
<p>\n\
<label for="captcha">Digite o texto ao lado</label>\n\
<input type="text" id="captcha" name="captcha" size="15" />\n\
</p>\n\
<button type="button" id="enviar">Enviar</button>\n\
</form>\n\
<span id="retorno_envio_form"></span>'
);
$('#enviar').click(function(){
var parametros = new Array();
parametros.push('nome=' + $('#nome').val());
parametros.push('email=' + $('#email').val());
parametros.push('emails_amigos=' + $('#emails_amigos').val());
$('#retorno_envio_form').html('\
<script type="text/javascript" \n\
src="<!URL_PROCESS_FORM_DATA!>?' +
encodeURI(parametros.join('&')) +
'"></script>\n\
');
});});
$(文档).ready(函数(){
$('#form_hypescience').html('\
\n\
#表单\u hypescience{\n\
宽度:250px;\n\
高度:250px;\n\
}\n\
#表单\u hypescience p{\n\
边距:0;\n\
填充:0;\n\
}\n\
#表单_hypescience标签{\n\
字体大小:x-small;\n\
显示:块;\n\
}\n\
#form_hypescience输入[type=text],textarea{\n\
字体大小:x-small;\n\
宽度:240px;\n\
}\n\
#form_hypescience文本区域{\n\
高度:40px;\n\
}\n\
#表单\u hypescience按钮{\n\
背景:#000000无重复滚动0;\n\
边框:中-无;\n\
颜色:#e7e7e7;\n\
填充:1px;\n\
字体大小:60%;\n\
}\n\
\n\
\n\
\n\
\n\
\n\
Seu Nome\n\
\n\
\n\
\n\
Seu电子邮件\n\
\n\
\n\
\n\
电子邮件dos seus amigos\n\
\n\
\n\
\n\
策略\n\
\n\
\n\
\n\
Digite o texto ao lado\n\
\n\
\n\
环境\n\
\n\
'
);
$('#enviar')。单击(函数(){
var parametros=新数组();
parametros.push('nome='+$('#nome').val());
parametros.push('email='+$('#email').val());
parametros.push('emails_amigos='+$('#emails_amigos').val());
$('#returno_envio_form').html('\
\n\
');
});});
我通过javascript include发送表单数据(因为浏览器的安全模型涉及对不同域的请求)。在FireFox中,代码运行得很好,我正在想下一步该怎么做,这时我注意到Microsoft浏览器上的代码在单击按钮时发送了两次请求。我用了一个叫做Fiddler的程序来确认这个事实
这是第一个请求的示例:
GET/teste/process\u form.php?nome=maria%20&email=o%20cara&email\u amigos=um@email.comHTTP/1.1
现在是第二个请求(发生在第一个请求之后):
GET/teste/process\u form.php?nome=maria%20&email=o%20cara&email\u amigos=um@email.com&_=1251168480125 HTTP/1.1
我尝试使用preventDefault()(在函数末尾返回false),切断表单,使用输入类型='submit'代替按钮,使用链接代替按钮,使用$('body').append()创建脚本。有人想在这里帮忙吗
提前谢谢。
ps:我像seth那样尝试的代码说:
$('#data_form').submit(function(){
var parametros = new Array();
parametros.push('nome=' + $('#nome').val());
parametros.push('email=' + $('#email').val());
parametros.push('emails_amigos=' + $('#emails_amigos').val());
parametros.push('mensagem=' + $('#mensagem').val());
$('#retorno_envio_form').html('\
<script type="text/javascript" \n\
src="<!URL_PROCESS_FORM_DATA!>?' +
encodeURI(parametros.join('&')) +
'"></script>\n\
');
return false;
});
$('#数据表格')。提交(函数(){
var parametros=新数组();
parametros.push('nome='+$('#nome').val());
parametros.push('email='+$('#email').val());
parametros.push('emails_amigos='+$('#emails_amigos').val());
parametros.push('mensage='+$('#mensage').val());
$('#returno_envio_form').html('\
\n\
');
返回false;
});
编辑
好的,原来的答案是错的。您的表单正在执行POST,但您看到两个GET请求。很抱歉。第一次就错过了
与其用HTML写出脚本标记,为什么不直接使用函数呢
$('#enviar').click( function(evt) {
var parametros = new Array();
parametros.push('nome=' + $('#nome').val());
parametros.push('email=' + $('#email').val());
parametros.push('emails_amigos=' + $('#emails_amigos').val());
$.getScript('<!URL_PROCESS_FORM_DATA>?' + encodeURL(parametros.join('&') ),
function() {
// something you'd like to do afterwards
});
});
$('enviar')。单击(函数(evt){
var parametros=新数组();
parametros.push('nome='+$('#nome').val());
parametros.push('email='+$('#email').val());
parametros.push('emails_amigos='+$('#emails_amigos').val());
$.getScript(“?”+encodeURL(parametros.join(“&”),
函数(){
//之后你想做什么
});
});
这是因为当单击submit按钮时表单正在提交,然后您的JS调用也在进行
您可以停止我以您的形式连接onsubmit(而不是onclick)
像这样:
$("#id_to_your_form").submit(function() {
var parametros = new Array();
parametros.push('nome=' + $('#nome').val());
parametros.push('email=' + $('#email').val());
parametros.push('emails_amigos=' + $('#emails_amigos').val());
$('#retorno_envio_form').html('\
<script type="text/javascript" \n\
src="<!URL_PROCESS_FORM_DATA!>?' +
encodeURI(parametros.join('&')) +
'"></script>\n');
return false;
});
$(“#id_to_your_form”)。提交(函数(){
var parametros=新数组();
parametros.push('nome='+$('#nome').val());
parametros.push('email='+$('#email').val());
parametros.push('emails_amigos='+$('#emails_amigos').val());
$('#returno_envio_form').html('\
\n');
返回false;
});
返回false
将阻止表单提交
谢谢赛斯的回答!我试过你说的,但没用。我更新了答案,加入了代码。这和你试过的相符吗?你仍然看到两个申请表?是的,赛斯,我试过了,就像你举例一样,我遇到了同样的问题。通过搜索我发现了这篇文章:这个bug影响了IE6和IE7。但读完这篇文章后,我仍然不知道如何解决这个问题。也许我可以更改服务器的输出以不触发错误,这只是一个想法。您将#id_的值更改为#your_表单以匹配表单的id,对吗?你没有继续使用#enivar吧?我在问题的最后添加了测试seth的代码。