2013-06-24 51 views
0

我試圖在本地服務器上調用PHP scriptjQueryCasperJS函數內,但不知何故,我無法得到結果。這裏是我的代碼:無法使用jQuery從PHP腳本中獲得結果

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也無法正常工作和del艾弗斯結果(見上文)
  • 此外jQuery函數$.load()不工作(結果是那麼「空」)
  • jQuery的正確裝入(否則CasperJS引發錯誤)
  • 如果我只是回到它的工作原理正確(例如,return "test";

不知道該怎麼做。感謝您的任何建議!

回答

1

我建議改變你的異步爲false $.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爲指出它,是你的網頁將'掛起',直到請求完成

+0

真棒,它的作品,非常感謝你!解決方案後,我不得不添加「webSecurityEnabled:false」,但這是另一回事。 – Crayl

+2

你沒有提到這個缺點,對於用戶來說,頁面在請求未決時會崩潰。你無法真正注意到這一點,因爲反應是即時的。 – Esailija

+0

@Esailija是的,頁面將掛起** IF **您正在加載DOM之前運行此腳本。如果你正在運行這個,那麼只會有一個延遲。 –

1

$.get是異步的,其結果將不可用,直到 回調被調用。

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

對$ .get()沒有任何的jQuery文檔$ .get()返回頁面的內容。您正在使用http傳輸實例。