【问题标题】:Jquery when ; value not setjQuery何时;未设置值
【发布时间】:2013-10-22 06:47:40
【问题描述】:

我需要根据http://kasaragodyellowpages.com/pagedata.php?id=x 返回的 0 或 x 值替换页面中“title”类元素的 href。此 url 设置为 1 以进行测试。正确处理 ajax 请求。

问题是延迟响应和失败

<script type="text/javascript">
     $(document).ready(function(){

        $('.title').each(function() {
        var url = null;
            var l = this.href;
        id_str= (l.replace('http://www.kasaragodyellowpages.com/index.php?page=item&id=',''));
        var loadUrl = "pagedata.php";  
        $.get(  
            loadUrl,  
            {id: id_str},  
            function(responseText){  
               if (responseText!=0) {
                url='http://www.kasaragodyellowpages.com/index.php?page=page&id='+responseText;
                console.log('data value for '+url);
               }
            }  
        );
        if(url){
          console.log('set data for '+url);
          $(this).attr( 'href', url );
        }else
        {
          console.log('NOT set data for '+url);
        }
        });


     });
     </script>

如图所示,ajax 结果是在从循环中设置值之后设置的,无需等待 ajax 成功

在此之后我替换为 when

<script type="text/javascript">
     $(document).ready(function(){

        $('.title').each(function() {
        var url = null;
            var l = this.href;
        id_str= (l.replace('http://www.kasaragodyellowpages.com/index.php?page=item&id=',''));
        var loadUrl = "pagedata.php";
        $.when($.get(
            loadUrl,  
            {id: id_str},  
            function(responseText){  
               if (responseText!=0) {
                url='http://www.kasaragodyellowpages.com/index.php?page=page&id='+responseText;
                console.log('data value for '+url);
               }
            }  
        ))
    .then(if(url){
          console.log('set data for '+url);
          $(this).attr( 'href', url );
        }else
        {
          console.log('NOT set data for '+url);
        }); 

        });
     });
     </script>

但这没有用

【问题讨论】:

    标签: javascript ajax jquery .when


    【解决方案1】:

    在您的第一个代码中,将您对 $.get 的调用替换为

         $('.title').each(function() {
          var url = null;
          var self = this;
            .
            .
            .
            .
    
     $.get(  
            loadUrl,  
            {id: id_str},  
            function(responseText){  
               if (responseText!=0) {
                url='http://www.kasaragodyellowpages.com/index.php?page=page&id='+responseText;
                console.log('data value for '+url);
    
    
      if(url){
          console.log('set data for '+url);
          $(self).attr( 'href', url );
        }else
        {
          console.log('NOT set data for '+url);
        }
               }
            }  
        );
    

    原因是 $.get 是一个异步调用。意思是,即使还没有收到来自 $.get 的响应,也会执行 $.get 之后的所有代码。

    【讨论】:

    • $(this).attr('href', url);不工作,但在控制台中打印
    • 请查看修改后的代码。 $(this).attr( 'href', url ) 现在是 $(self).attr( 'href', url )
    猜你喜欢
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 2012-10-16
    • 2014-01-25
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多