search

Home  >  Q&A  >  body text

javascript - phantomjs 里面加了得ajax 同步为什么没效果

page.evaluate(function(orderData) {

$.ajaxSetup({   async : false  }); 
 $.get(url,function(data){

});

});

上面是主要代码,我想让$.get 同步执行,可是没效果。。有朋友知道原因吗?

巴扎黑巴扎黑2902 days ago307

reply all(1)I'll reply

  • PHP中文网

    PHP中文网2017-04-10 16:55:37

    sorry,理解错问题的意思了

    你运行下这个看看

    var webpage=require('webpage');
    var url="http://segmentfault.com";
    var page=webpage.create();
    
    page.onLoadFinished = function(status){
        if(status==="success"){
            var result=page.evaluate(function(){
                var url="http://segmentfault.com/q/1010000004337401?_ea=575071";
                var result="";
                $.ajaxSetup({   async : false  });
                $.get(url,function(data){
                    result=data;
                });
                return result;
            });
    
            console.log('result:%s',result);
            phantom.exit();
        }
    };
    
    page.open(url);

    之前的回答
    1.webpage页面上有jQuery类库~~
    2.page.evaluate是个同步方法,也就是传入evaluate方法的函数执行完了,就返回,可以取到返回值
    3.想要异步调用,要是用page.evaluateAsync方法,无法取到返回值。异步调用获取的数据只能作用到你操作的web页面上

    官方例子:

    page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", >function() {
    
       page.evaluateAsync(function() {
         $.ajax({url: "api1", success: function() {}});
       });
    
       page.evaluateAsync(function() {
       $.ajax({url: "api2", success: function() {}});
      });
    
     });

    reply
    0
  • Cancelreply