0

我试图PHP script在我的本地服务器上调用jQuery一个CasperJS函数,但不知何故我没有得到结果。这是我的代码:

casper.then(function() {
    var result = casper.evaluate(function() {
        var result = $.get('http://localhost/test.php', function() {});
        return result;
    });
    result = JSON.stringify(result);
    this.echo(result);
    this.exit();
});

调用哪个 URL 无关紧要,它总是提供相同的结果:

{"abort":{},"always":{},"complete":{},"done":{},"error":null,"fail":{},"getAllRe
sponseHeaders":{},"getResponseHeader":{},"overrideMimeType":{},"pipe":null,"prog
ress":{},"promise":{},"readyState":1,"setRequestHeader":{},"state":{},"statusCod
e":{},"success":null,"then":{}}

我检查过的事情:

  • XAMP 服务器正在运行和工作
  • PHP文件在那里
  • 任何其他 URL 也不起作用并提供结果(见上文)
  • jQuery函数$.load()也不起作用(结果是“null”)
  • jQuery 加载正确(否则 CasperJS 会抛出错误)
  • 如果我只是简单地返回它可以正常工作(例如return "test";

不知道该怎么办。感谢您的任何建议!

4

3 回答 3

1

$.get是异步的,在调用回调之前其结果将不可用。

casper.then(function() {
    var _this = this;
    casper.evaluate(function() {
        $.get('http://localhost/test.php', function(result) {
            _this.echo(result);
            _this.exit();
        });
    });
});
于 2013-06-24T14:52:51.140 回答
1

我建议将您的 async 更改为 false in$.ajaxSetup();

而且,您应该从回调成功函数中获取返回数据

casper.then(function() {
    var result = casper.evaluate(function() {

        var $return = ''; // initiate $return

        var async = $.ajaxSetup()['async'];
        $.ajaxSetup({'async':false}); // Set async to false

        $.get('http://localhost/test.php', function( data ) {

            $return = data; // test.php return data is saved to $return

        });

        $.ajaxSetup({'async': async }); // Set async to back to original value

    });
    result = JSON.stringify($return);
    this.echo(result);
    this.exit();
});

感谢 Esailija指出,唯一的缺点是您的页面将“挂起”,直到请求完成

于 2013-06-24T15:06:08.247 回答
0

$.get() 的 jQuery 文档中没有任何地方 $.get() 返回页面的内容。您正在使用 http 传输实例。

于 2013-06-24T14:54:18.820 回答