我需要将变量传递给从php exec命令调用的javascript

时间:2019-01-23 16:36:38

标签: javascript php

我有一个通过exec命令调用phantomjs的php文件。 phantom.js文件调用需要包含变量的URL。我需要从php中将这些变量与exec命令一起发送,并在phantom.js网址中显示这些变量。

这是我当前的硬编码php:

$response = [];
exec('/usr/bin/phantomjs phantomjstest.js', $response);
$data = $response[19];

和phantom.js

var page = require('webpage').create();
console.log('The default user agent is ' + page.settings.userAgent);
page.settings.userAgent = 'SpecialAgent111';
page.open('https://www.aa.com/travelInformation/flights/status/detail?search=AA|1698|2019,1,23&ref=search', function(status) {
if (status !== 'success') {
    console.log('Unable to access network');
} else {
    var ua = page.evaluate(function() {
        return document.getElementById('aa-content-frame').innerHTML;
    });
    console.log(ua);
}
phantom.exit();
});

我想做的是更改php,以便它将2个变量(从表单提交)传递给javascript。像这样:

PHP:

exec('/usr/bin/phantomjs phantomjstest.js?variable1=$forminput1&variable2=$forminput2', $response);

JS

page.open('https://www.aa.com/travelInformation/flights/status/detail?search=AA|variable1|variable2&ref=search', function(status) {

或者我可以在php中构造整个URL,并将其与exec命令一起发送。

对于任何一种方法或从此处到达那里的其他方法的任何想法,都将受到赞赏。谢谢。


根据评论中的建议,我已更新PHP以使其包含:

exec("/usr/bin/phantomjs phantomjstest.js https://www.aa.com/travelInformation/flights/status/detail?search=AA|1698|2019,1,23&ref=search", $response);

和我的JS:

var page = require('webpage').create();
console.log('The default user agent is ' + page.settings.userAgent);
page.settings.userAgent = 'SpecialAgent111';

var system = require('system');
var args = require('system').args;
var address = system.args[0];
page.open(address, function (status) {

if (status !== 'success') {
    console.log('Unable to access network');
} else {
    var ua = page.evaluate(function() {
        return document.getElementById('aa-content-frame').innerHTML;
    });
    console.log(ua);
}
phantom.exit();
});

但是我得到的只是一个空响应。知道为什么地址没有通过PHP exec传递或没有被JS拾取和运行吗?

谢谢。

******解决方案********

有几件事需要修复,我要感谢下面评论的内容,以及关于SO的解决类似问题的其他方法。

首先,JS不喜欢URL中的&符号。我必须在传递的参数中使用@,然后在JS端将其替换。

第二,JS不喜欢URL中的管道符号,因此我不得不对其进行转义。

完成的PHP如下:

exec("/usr/bin/phantomjs phantomjstest.js https://www.aa.com/travelInformation/flights/status/detail?search=AA\|$flight\|$date@ref=search", $response);

和类似JS的

var page = require('webpage').create();
console.log('The default user agent is ' + page.settings.userAgent);
page.settings.userAgent = 'SpecialAgent111';

var system = require('system');
var args = require('system').args;
var address = system.args[1];
var address = address.replace(/@/gi,"&");
page.open(address, function (status) {

if (status !== 'success') {
    console.log('Unable to access network');
} else {
    var ua = page.evaluate(function() {
        return document.getElementById('aa-content-frame').innerHTML;
    });
    console.log(ua);
}
phantom.exit();
});

再次,谢谢大家!!!

1 个答案:

答案 0 :(得分:0)

******解决方案********

有几件事需要修复,我要感谢下面评论的内容,以及关于SO的解决类似问题的其他方法。

首先,JS不喜欢URL中的&符号。我必须在传递的参数中使用@,然后在JS端将其替换。

第二,JS不喜欢URL中的管道符号,因此我不得不对其进行转义。

完成的PHP如下:

exec("/usr/bin/phantomjs phantomjstest.js 
https://www.aa.com/travelInformation/flights/status/detail? 
search=AA\|$flight\|$date@ref=search", $response);

和类似JS的

var page = require('webpage').create();
console.log('The default user agent is ' + page.settings.userAgent);
page.settings.userAgent = 'SpecialAgent111';

var system = require('system');
var args = require('system').args;
var address = system.args[1];
var address = address.replace(/@/gi,"&");
page.open(address, function (status) {

if (status !== 'success') {
    console.log('Unable to access network');
} else {
var ua = page.evaluate(function() {
    return document.getElementById('aa-content-frame').innerHTML;
});
console.log(ua);
}
phantom.exit();
});