好的,所以,这是我的问题。我正在尝试通过 AJAX 将存储在 javascript 变量中的标签属性发送到后端(PHP)。
$.ajax({
type: "POST",
url: '/requests/mercury.php',
data: {url : $(this).data('link')},
success: function(data){
console.log(data);
}
这是我想要传递给 CURL 请求的 URL。
如果我手动写入正确的 URL,CURL 请求就可以工作,但由于某种原因我无法在后端检索变量。 我尝试过调试,似乎得到一个空数组,但我不知道为什么。
$link = $_POST['url'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://mercury.postlight.com/parser?url=".$link);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"x-api-key: AU5zjyEqyL0LgR8zkb4Iurhlenpn52bGtbiqJA4t",
));
$x = curl_exec($ch);
curl_close($ch);
尝试在 localhost(MAMP) 和 Heroku 上部署,这两个地方都有同样的问题。
最佳答案
您好,Pjotr Leškin,HTTP 请求方法存在问题。在您的index.php 上,Ajax 代码工作正常,因为您正在发送 POST 请求,但在链接单击上您将打开 /requests/mercury.php
这是一个 GET 请求。因此,要获取 /requests/mercury.php
加载时的参数,您需要 $_GET['url'] 并且需要将查询字符串与 url 一起传递。我对您的代码做了一些更改来处理 GET 和 POST 请求。
echo "<a href='requests/mercury.php' data-link = ".$item->link." target='_blank'>";
到
echo "<a href='requests/mercury.php?url={$item->link}' data-link = ".$item->link." target='_blank'>";
和
$link = $_POST['url'];
至
$link = "";
if (isset($_POST['title'])) {
$link = $_POST['url'];
} else {
$link = $_GET['url'];
}
我已经在您的 github 代码上创建了一个拉取请求。希望这会对您有所帮助。
关于javascript - 无法通过 AJAX 在后端通过 POST 获取变量,而在前端则完全没问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51466869/