Как в SAS/HTML/javascript закрыть страницу STP _webout html сразу после ее открытия?

Из формы на веб-странице я открываю хранимый процесс (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;

но я получаю сообщение об ошибке, которое гласит:

Скрипты могут закрывать только те окна, которые были им открыты

Я не могу найти никакого решения для этого. Возможно ли обойти проблему, чтобы получить такой же результат?

2 ответа

Вам действительно нужно открыть другое окно? Лучший способ обойти эту проблему - вызвать SAS асинхронно, используя Ajax или, что еще лучше, адаптер h54s.

Посмотрите мои быстрые или подробные руководства, которые объясняют, как - после настройки - вы можете вызывать SAS из javascript всего за несколько строк кода, например, следующим образом:

var tables = new h54s.Tables([{"some":"data"}], 'datain');

adapter.call('/Your/SAS/_PROGRAM', tables, function(err, res) {
  if(err) {
    console.log(err);  //error handling             
  } else {
    console.log(res); // do stuff with SAS data
  }
});

Вы можете попробовать ajax-запрос с dataType: "jsonp", Его можно преодолеть CORS. STP должен возвращать ответ json, заключенный в имя функции js, чтобы он выполнялся в браузере после ответа 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 и установить для результатов возможностей значение Поток.

Другие вопросы по тегам