从php运行长SAS存储过程而不挂起浏览器

时间:2016-09-22 14:26:57

标签: php ajax linux yii sas

我需要调用SAS存储过程,大约需要5分钟才能运行而不会挂断浏览器。我使用Yii堆栈并通过URL调用SAS。我附加了代码,但说实话,我已经尝试了很多这样的事情,以至于我的代码版本不再具有任何意义。任何方向都将不胜感激。

注意:我已经尝试过exec(),但似乎没有用。我尝试过ajax,并且更喜欢异步ajax调用,但此时我会尝试任何操作。任何其他需要的信息,请告诉我。

更新:我在php中创建了一个控制器动作,如果我直接转到浏览器网址中的控制器动作,则会成功完成存储过程。但是,如果我使用ajax get调用该控制器操作,则存储的进程不会执行。

2 个答案:

答案 0 :(得分:1)

ajax应该可以正常工作!如果在没有参数的情况下调用存储过程,您甚至可以尝试使用h54s(html5 for SAS)javascript library。我写了一篇关于这个here的指南。示例代码 - 一旦配置 - 如下:

var adapter = new h54s(); // only need one instance
var myParams = {}; // create empty object if no parameters 
var jsTablesObject = new h54s.Tables([myParams],'SASControlTable'); //make H54s dataset 
adapter.call('/Webapp/example',jsTablesObject,function(err,res) {// call STP here
  //we just submitted an STP request, now deal with response
  alert(res);
  // all code here will execute AFTER the stored proc is finished
});
// all code here will execute immediately 

答案 1 :(得分:1)

如果您从php成功调用SAS存储过程,那么您只需要从javascript中异步调用您的php服务。

$.ajax({
    type: "POST",
    url: url + '&_action=background',
    data: data, // additional parameters 
    async:true,
    success: function(response){  
     alert(response); 
     // all code here will execute AFTER the PHP/STP is finished
    }
});
// all code here will execute immediately 

归功于@ addSphere

编辑:在@ quentin的建议

之后将_action = background添加到网址