2016-09-22 3 views
0

Ich brauche eine SAS gespeicherte Prozedur aufrufen, die etwa 5 Minuten in Anspruch nimmt mein Browser zu laufen, ohne aufzulegen. Ich benutze einen Yii-Stack und rufe SAS über eine URL auf. Ich würde Code beifügen, aber ehrlich gesagt habe ich zu diesem Zeitpunkt so viele Dinge ausprobiert, dass es keine Version meines Codes mehr gibt, die irgendeinen Sinn ergibt. Jede Richtung würde sehr geschätzt werden.Run lange SAS gespeicherte Prozedur von PHP ohne Browser hängen

Hinweis: Ich habe exec versucht() und das scheint nicht zu funktionieren. Ich habe Ajax ausprobiert und würde einen asynchronen Ajax-Anruf bevorzugen, aber an diesem Punkt werde ich alles versuchen. Weitere Informationen, die benötigt werden, lassen Sie es mich wissen.

UPDATE: Ich habe eine Controller-Aktion in PHP erstellt, die die gespeicherte Prozess erfolgreich abgeschlossen wurde, wenn ich direkt an die Controller-Aktion in der URL des Browsers gehen. Wenn ich diese Controller-Aktion jedoch mit einem Ajax abrufen, wird der gespeicherte Prozess nicht ausgeführt.

+0

wenn meine Antwort nicht geeignet ist (zB Sie URL basierte Parameter benötigen und können Ihre STP nicht bearbeiten) bitte posten Sie Ihre Versuch ajax bei Verwendung .. –

+0

ich bin verwirrt über Ihre Benutzung von PHP - sind Sie die SAS Stored Proc aus dem Client-Browser oder einem PHP-Server aufrufen? –

Antwort

1

Ajax sollte funktionieren! Wenn Ihr Stored Process ohne Parameter aufgerufen wird, können Sie sogar versuchen, die h54s (html5 for SAS) javascript library zu verwenden. Ich habe einen Leitfaden über diese here geschrieben. Beispiel-Code - einmal konfiguriert - ist wie folgt:

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 
+0

Lassen Sie mich versuchen, ein wenig klarer zu sein, sorry. Ich benutze Ajax, um den php-Controller anzurufen, der den SAS-Anruf ausführt. Der Grund, warum ich das tue, ist, dass das Aufrufen der SAS-URL mit Ajax mir einen CORS-Fehler gibt und ich bin ziemlich sicher, würde meinen Browser auflegen, während der SAS-Prozess läuft. Liege ich falsch? Und ich verwende Parameter in der URL-Zeichenfolge. –

+0

es würde nicht notwendigerweise Ihren Browser hängen, aber es würde ein CORS-Problem geben, wenn die Seite nicht vom SAS-Webserver bedient wurde. Können Sie Ihre Domain als Ausnahme hinzufügen? Oder die gleiche Ursprungsrichtlinie zum Testen deaktivieren? Angst, ich kann nicht mit der PHP-Seite helfen .. Aber so oder so, es klingt für mich, als ob Sie nur die ganze Sache in einen Event-Handler (im Browser, mit Javascript) wickeln müssen. Wenn Sie eine neue Frage hinzufügen könnten, die zeigte, was Sie versucht haben (Ajax weisen), dann glaube ich Ihnen eine viel bessere Antwort aus dem Bereich erhalten werden .. –

1

Wenn Sie die SAS Stored Procedure erfolgreich von PHP-Aufruf dann müssen Sie nur von JavaScript asynchron Ihre PHP-Dienst aufrufen.

$.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 

Kredit @angel

Edit: Hinzufügen _action = Hintergrund URL folgenden @ Quentins Vorschlag

+0

Problem dabei ist, dass die Ajax-Aufruf wartet auf den SAS-Prozess zu beenden. Wenn ich versuche, die Seite zu verlassen, schneidet sie den Ajax-Aufruf ab, der das Skript scheinbar stoppt. Für mich ergibt das keinen Sinn, deshalb weiß ich, dass ich etwas vermisse. –

+0

Es hängt auch auf der Seite. Ich kann nicht weg navigieren. Es dreht sich nur, bis der Prozess beendet ist. –

+0

@JonSkinner Wenn sie weg navigieren, was ist das Problem mit dem Skript zu stoppen? Die Ergebnisse können zu diesem Zeitpunkt nicht zurückgegeben werden, ohne dass sie erneut ausgeführt werden. –

Verwandte Themen