CasperJS Ajax请求无响应:页面标题无法发送至PHP脚本求助
Troubleshooting CasperJS Ajax Requests to PHP Scripts
Let’s fix up your code and walk through the common issues that might be blocking your Ajax request from working. First, here’s a complete, working version of your CasperJS script that grabs the page title and sends it to a PHP script reliably:
var casper = require('casper').create({ verbose: true, // Turn on logging to debug request issues logLevel: 'info' }); casper.start("https://www.google.com/", function() { this.echo("Successfully loaded the target page"); }); casper.then(function() { // Use Casper's built-in method to get the page title (cleaner than manual DOM queries) var pageTitle = this.getTitle(); // Send the title to your PHP script using Casper's sendAJAX method // The final "true" makes this a synchronous request, so Casper waits for the response var phpResponse = this.sendAJAX('http://your-domain.com/your-php-script.php', 'POST', { page_title: pageTitle }, true); this.echo("PHP Script Response: " + phpResponse); }); casper.run(function() { this.exit(); // Exit once all tasks are complete });
Key Fixes & Important Notes:
- Avoid page context limitations: Using Casper’s native
sendAJAXmethod (instead of trying to run browser-side Ajax insideevaluate()) skips issues like missing jQuery on the target page or cross-origin restrictions (since Casper runs server-side). - Wait for the request to finish: Setting the last parameter of
sendAJAXtotruemakes the request synchronous, ensuring Casper doesn’t exit before the data is sent and a response is received. - Simplify title retrieval: Casper has a built-in
getTitle()method that’s far cleaner than manually querying the DOM for the<title>tag.
Example PHP Script (your-php-script.php)
Make sure your PHP script correctly handles the incoming POST data and sends a response:
<?php // Check if the title data was received if (isset($_POST['page_title'])) { $receivedTitle = $_POST['page_title']; // Do something with the title (e.g., save to a log or database) file_put_contents('scraped_titles.log', $receivedTitle . PHP_EOL, FILE_APPEND); // Send a success response back to CasperJS echo json_encode([ 'status' => 'success', 'message' => 'Title received', 'title' => $receivedTitle ]); } else { echo json_encode([ 'status' => 'error', 'message' => 'No title data received' ]); } ?>
Common Pitfalls to Watch For:
- Incorrect PHP endpoint URL: Double-check that the URL in
sendAJAXpoints to your actual PHP script (use absolute paths to avoid confusion). - Async requests without wait conditions: If you ever use async Ajax inside
evaluate(), you need to add wait logic (likecasper.waitFor()) to prevent Casper from exiting early. - Server-side restrictions: Ensure your web server allows POST requests to the PHP script, and that there are no firewalls or security plugins blocking the request.
内容的提问来源于stack exchange,提问作者Nadeem Ahmad
相关产品推荐
相关产品推荐

