2

从网页中的表单,我在新窗口中打开存储过程 (STP)。

<form target="_blank" action="http://<UrlToMySTP>" method="get" enctype="multipart/form-data">

STP 做了一些事情,完成后我需要关闭它的窗口。所以我试图用这样的javascript关闭它

data _null_;
    file _webout;
    put '<HTML>';
    put '   <HEAD>';
    put '   </HEAD>';
    put '   <BODY onLoad="window.close()">';
    put '   </BODY>';
    put '</HTML>';
    run;

但我收到一条错误消息,上面写着:

脚本只能关闭它打开的窗口

我找不到任何解决方案。是否有可能规避问题以获得相同的结果?

4

1 回答 1

1

您可以尝试使用 ajax 查询dataType: "jsonp"它可以克服 CORS。STP 必须返回由 js 函数名称包装的 json 响应,该响应将在 ajax 响应后在浏览器中执行。

例子

json_test.sas

 data _null_;
 file _WEBOUT;
 put "JSFunctionToAlertHTML({""Code"":0});";
 run;

html_test.html

必须包含:

$.ajax({
          url: "http://servername:port/SASStoredProcess/do?_program=path%2Fjson_test&callback=?",
          dataType: "jsonp"
        });

请注意callback=url中的其他参数。

  function JSFunctionToAlertHTML(json){
    //Your code
  }

如果您使用 EG 创建存储过程,则必须从 STP 设置中排除存储过程宏并将结果功能设置为流。

于 2017-08-25T08:05:04.563 回答