Как в 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 и установить для результатов возможностей значение Поток.