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

y1aodyip  于 2022-11-09  发布在  PHP
关注(0)|答案(2)|浏览(145)

我需要调用一个SAS存储过程,它需要大约5分钟的时间来运行而不挂起我的浏览器。我使用Yii堆栈并通过url调用SAS。我会附加代码,但老实说,我已经尝试了这么多的事情,在这一点上,没有一个版本的代码是有意义的。任何方向将非常感谢。
注意:我试过exec(),但似乎不起作用。我试 AJAX ,我更喜欢异步ajax调用,但现在我会尝试任何方法。需要任何其他信息,请告诉我。
UPDATE:我在php中创建了一个控制器操作,如果我直接进入浏览器url中的控制器操作,它就能成功地完成存储的进程,但是,如果我用 AJAX get调用那个控制器操作,存储的进程就不能执行。

osh3o9ms

osh3o9ms1#

如果您从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

贷记到@angel
编辑:按照@quentin的建议,在URL中添加_action=background

093gszye

093gszye2#

AJAX 应该可以正常工作!你甚至可以尝试使用SASjs javascript library。更多关于website的细节。示例代码-一旦配置-如下所示:

var adapter = new SASjs.default({
     appLoc: "/SASFolder/appLocation"
    ,serverType:"SAS9"
}); // Can be SAS9 or Viya

var dataObj = {tableName: [{ colName: 'colValue' }]}; // can be null
adapter.request('/subfolder/servicename',dataObj)
.then((response) => {
  //we just submitted a request, now deal with response
  alert(response);
  // all code here will execute AFTER the STP / JES is finished
});
// all code here will execute immediately

相关问题