在我的项目中,ajax的成功功能有很多内容。我将把这些内容发送到一个名为textcsc.js的文件。并且在ajax中调用include()方法。
在成功运作的独立代码之前:
$(document).ready(function()
{
$('#bbs td').dblclick(function (){
.......
$.ajax({
dataType:'json',
........
success:function(data)
{
var $myHtml=data.stPrc;
$myHtml.find("label").filter(function(){return $(this).text()===stChr;}).parent().attr("class", "rightd");
$myHtml.find('label:contains('+stChr+')').next('label:contains('+stTrnStr+')').parent().next().attr('class','rightd');
$myHtml.find('label:contains('+stChr+')').next('label:contains('+stTrnStr+')').parent().next().children("div").eq(0).attr('class','speech right');
$myHtml.find('label:contains('+stChr+')').next('label:contains('+stFinStr+')').parent().next().attr('class','rightd');
$myHtml.find('label:contains('+stChr+')').next('label:contains('+stFinStr+')').parent().next().children("div").eq(0).attr('class','speech right');
$myHtml.find('label:contains('+stChr+')').next('label:contains('+stHngStr+')').parent().next().children("div").eq(0).attr('class','speech right');
......
}
});
});
});
将所有$ myHtml.find内容移至textcsc.js后
$(document).ready(function()
{
$('#bbs td').dblclick(function (){
.......
$.ajax({
dataType:'json',
.......
success:function(data)
{
var $myHtml=data.stPrc;
include(textcsc.js);
......
}
});
});
});
它失败了,我试过了:
<script src="textcsc.js"></script>
$(document).ready(function()
{
$('#bbs td').dblclick(function (){
.......
$.ajax({
dataType:'json',
........
success:function(data)
{
var $myHtml=data.stPrc;
chgLftRig($myHtml);//chgLftRig() is in textcsc.js
........
}
});
});
});
再次失败。然后我尝试了另一种方式:
$(document).ready(function()
{
$('#bbs td').dblclick(function (){
.......
$.ajax({
dataType:'json',
........
success:function(data)
{
var $myHtml=data.stPrc;
chgLftRig($myHtml);
......
}
});
function chgLftRig($myHtml)//in the $('#bbs td').dblclick(
{
$myHtml.find("label").filter(function(){return $(this).text()===stChr;}).parent().attr("class", "rightd");
$myHtml.find('label:contains('+stChr+')').next('label:contains('+stTrnStr+')').parent().next().attr('class','rightd');
$myHtml.find('label:contains('+stChr+')').next('label:contains('+stTrnStr+')').parent().next().children("div").eq(0).attr('class','speech right');
$myHtml.find('label:contains('+stChr+')').next('label:contains('+stFinStr+')').parent().next().attr('class','rightd');
$myHtml.find('label:contains('+stChr+')').next('label:contains('+stFinStr+')').parent().next().children("div").eq(0).attr('class','speech right');
$myHtml.find('label:contains('+stChr+')').next('label:contains('+stHngStr+')').parent().next().children("div").eq(0).attr('class','speech right');
}
});
});
它运行正常,我把chgLftRig()从$(&#39; #bbs td&#39;)。dblclick()中删除,再次失败。
我不知道$ myHtml为什么不能用$(&#39; #bbs td&#39;)。dbclick()。
答案 0 :(得分:1)
你可以这样做:
$.ajax({
dataType:'json',
.......
success:function(data)
{
var $myHtml=data.stPrc;
$.getScript('textcsc.js', function(){
addSomeData();
});
......
}
});
然后在textcsc.js文件中
function addSomeData(){
console.log('some magic here')
}
答案 1 :(得分:1)
正如A.iglesias所说,并非所有现代浏览器都在其本机解释器中使用include语法,如果你想以这种方式破坏你的js代码,我强烈建议你使用ES6语法和NPM处理程序
在ES5中,制作函数,并在js文件中划分,在当前的js之前用html语法调用它们(所以在使用之前声明函数)
<script src="jquery.js" ></script>
<script src="textcsc.js" ></script>
<script src="youajaxcall.js"></script>
并在您的textscs.js中:
function renderDataFromAjaxCall($myhtml){
$myHtml.find("label").filter(function(){return $(this).text()===stChr;}).parent().attr("class", "rightd");
$myHtml.find('label:contains('+stChr+')').next('label:contains('+stTrnStr+')').parent().next().attr('class','rightd');
$myHtml.find('label:contains('+stChr+')').next('label:contains('+stTrnStr+')').parent().next().children("div").eq(0).attr('class','speech right');
$myHtml.find('label:contains('+stChr+')').next('label:contains('+stFinStr+')').parent().next().attr('class','rightd');
$myHtml.find('label:contains('+stChr+')').next('label:contains('+stFinStr+')').parent().next().children("div").eq(0).attr('class','speech right');
$myHtml.find('label:contains('+stChr+')').next('label:contains('+stHngStr+')').parent().next().children("div").eq(0).attr('class','speech right');
}
在你的ajax电话里面:
$.ajax({
dataType:'json',
.......
success:function(data)
{
var $myHtml=data.stPrc;
renderDataFromAjaxCall($myhtml)
......
}
});
您可以查看babeljs.io并开始使用新的js开发。 如果你想以旧的方式保留它,我建议你使用模块化的JS设计模式,Design Patterns js
答案 2 :(得分:0)
我担心include()不是jquery或javascript函数。如果要隔离该代码,最好使用该代码创建一个函数并在成功中调用它。
您可以将该功能放在另一个文件中,然后使用标签将其导入.html文件中。
<script src="yourjsfile.js" ></script>