无法使用jQuery从PHP脚本获取结果

时间:2013-06-24 14:49:55

标签: javascript jquery phantomjs casperjs

我试图在我的本地服务器上使用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文件在那里
  • 任何其他网址也不起作用并提供结果(见上文)
  • jQuery函数$.load()也不起作用(结果是“null”)
  • 正确加载jQuery(否则CasperJS会抛出错误)
  • 如果我只是返回它正常工作(例如return "test";

不知道该怎么做。谢谢你的任何建议!

3 个答案:

答案 0 :(得分:1)

$.get是异步的,其结果将无法使用 调用回调。

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

答案 1 :(得分:1)

我建议您在$.ajaxSetup();

中将异步更改为false

此外,您应该从回调成功函数

中获取返回数据
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指出了这一点,唯一的缺点是,在请求完成之前,您的网页会“挂起”

答案 2 :(得分:0)

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