首页 > 解决方案 > 无法通过 AJAX 在后端通过 POST 获取变量,而在前端则完全没问题

问题描述

好的,所以,这是我的问题。我正在尝试通过 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 部署,这两个地方都有同样的问题。

完整代码可在https://github.com/pjotrleshkin/RSSParsing获得

标签: javascriptphpjqueryajaxcurl

解决方案


嗨 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 代码上创建了一个拉取请求。希望这会帮助你。


推荐阅读