如何将内容包含在ajax成功代码中?

时间:2017-09-19 13:41:50

标签: javascript jquery ajax

在我的项目中,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()。

3 个答案:

答案 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>