使用ajax调用忽略PhantomJS page.evaluateAsync

时间:2016-10-19 22:32:44

标签: javascript jquery ajax phantomjs

我正在尝试用phantomjs进行ajax调用。

我发现的唯一资源是:http://phantomjs.org/api/webpage/method/evaluate-async.html

虽然当我尝试通过evaluateasync进行ajax调用时,其中的代码未被执行。甚至是console.log('Async');没有打印。

有什么想法吗?

var webPage = require('webpage');
var page = webPage.create();
page.open("", function(status) {
    page.includeJs("https://code.jquery.com/jquery-3.1.1.min.js", function() {
        console.log('includejs');

        page.evaluateAsync(function() {
            console.log('Async');


            $.ajax({
                url : "some url",
                type : 'post',
                success : function(data) {
                    console.log(data);
                    console.log('success');

                },
                error : function(jqXHR, exception) {
                    console.log(jqXHR+'-'+exception);
                    console.log('error');

                }
            });

        });
});});

1 个答案:

答案 0 :(得分:1)

page.evaluateAsync不会被忽略,只是console.log函数内的page.evaluate/evaluateAsync()与PhantomJS脚本中的page.onConsoleMessage = function(msg) { console.log(msg); }; 不一样,它在沙盒环境,你必须订阅它:

console.log(jqXHR+'-'+exception);

此外,如果您尝试记录对象,例如

console.log(JSON.stringify(jqXHR)+'-'+exception);

您将获得[object Object]结果,而不是尝试

phantomjs --web-security=false evalasync.js

更重要:如果在打开一个网站后你要向另一个网站发出ajax请求,请使用--web-security = false开关运行你的脚本以允许跨域XHR。

max-width