jQuery AJAX/POST 不向 PHP 发送数据

Posted

技术标签:

【中文标题】jQuery AJAX/POST 不向 PHP 发送数据【英文标题】:jQuery AJAX/POST not sending data to PHP 【发布时间】:2014-04-01 16:04:02 【问题描述】:

所以我有这个问题有一段时间了,我知道关于这个主题有无数的问题,相信我,我尝试了所有可能的解决方案,但仍然不起作用。

这是最简单的示例,在我的情况下不起作用

jQuery:

$.ajax(
    url: "ajax/add-user.php",
    type: "POST",
    data: name: 'John',
    success: function(data)
        console.log(data);
    
);

PHP

echo json_encode($_POST);

就是这样。 我总是返回一个空数组作为响应。我尝试使用serialize() 获取data:,但响应始终为空。当我应该获取发布的值时,我没有收到任何错误,只是一个空数组。

如果,例如,在 php 中我尝试 echo 一些硬编码的变量,我会得到它们,但 $_POST$_GET 不起作用。

我可以如何识别问题的任何解决方案或方法?

谢谢。

编辑/解决方案

好的,看来问题出在 .htaccess 上,它重写了 url 并删除了扩展名。在网络选项卡中,请求确实被永久移动了。从 ajax url 中删除 .php 扩展名:解决了。谢谢你,很抱歉浪费了时间。干杯

【问题讨论】:

试试echo $_SERVER['REQUEST_METHOD']。如果您收到 POST 以外的内容,则您的原始帖子可能会被重定向,而您实际上是在执行 GET,这就是 $_POST 为空的原因。 你设置了 dataType: 吗? 所以是的...某些原因导致您的 POST 请求获得 http 301 重定向,从而导致您的脚本改为通过 GET 获取。 好的,看来问题出在 .htaccess 上,它重写了 url 并删除了扩展名。在网络选项卡中,请求确实被永久移动了。从 ajax url 中删除 .php 扩展名:解决了。谢谢你,很抱歉浪费了时间。干杯 @C.Ovidiu:请将最终解决方案添加为自我回答并将其标记为已接受,以便未来的搜索者受益。 【参考方案1】:

尝试编辑您的代码并使用:

$.ajax(url: 'ajax/add-user.php',
type: 'POST',
data: name: 'John',
dataType: 'html',
success: function(data)
alert("success");
console.log(data);
,error: function (xhr, ajaxOptions, thrownError) alert("ERROR:" + xhr.responseText+" - "+thrownError);
);

(因此您将收到错误和成功警报,请确保您收到的是 html。这些额外参数将帮助您微调 ajax 调用。稍后使用 async true/false)

另外,在新窗口中运行您的程序 ajax/add-user.php(键入 url)并查看它的回声。编辑程序并强制回显您的内容“即传奇的 hello world”并查看您的 ajax接收消息。

祝你好运。

【讨论】:

感谢您的回复,但正如我之前回复的那样,问题是因为 .htaccess 正在删除 .php 扩展名。【参考方案2】:

需要在ajax调用中设置数据类型为json。

JQUERY 代码:

$.ajax(
  url: "ajax/add-user.php",
  type: "POST",
  dataType:'json',
  data: name: 'John',
  success: function(data)
      console.log(data);
  
);

同时验证你的后端代码(php)是否可以接受json数据?

如果没有,请配置header如下:

PHP 代码:

/**
 * Send as JSON
 */
header("Content-Type: application/json", true);

快乐编码:

【讨论】:

并且或将其添加到您的 ajax 对象中: contentType: "application/json; charset=utf-8", 发现这个问题是因为method: "POST" 不起作用。 Per the docs, type 应该用于 jQuery 版本 method。我没有意识到 CMS 使用的是 1.8.2! 感谢@LenArt。我一直习惯于使用 jQuery 的最新版本,但最近在一个旧项目上工作,不知道为什么 POST 不起作用。我在这个旧项目中也需要 type :p 【参考方案3】:

为什么不使用jQuery.post?

$.post("ajax/add-user.php",
       name: 'John',
       function(response)
           console.log(response);
       
);

然后在您的 PHP 中,您可以像这样保存输入:

if(isset($_POST["name"]))

    $name= $_POST["name"];
    file_put_contents("name.txt", $name)
    header('HTTP/1.1 200 OK');

else

    header('HTTP/1.1 500 Internal Server Error');


exit;

【讨论】:

jQuery.ajax 包装了这个功能 - OP 已经在使用这个功能了【参考方案4】:

我遇到了同样的问题,结果证明是我在data 对象中的变量之一未定义。出于某种原因,阻止了发布数据的发送。将变量设置为 undefined 以外的其他值可以解决问题。

【讨论】:

我也有这个,但它并不总是导致问题。知道这里实际发生了什么吗?【参考方案5】:

我最近遇到了这个问题,但由于其他原因:

    我的 POST 数据被重定向为 301 我的服务器请求是 GET 我没有收到我的 POST 数据

我的原因 - 我在服务器上有一个 url 注册为:

http://mywebsite.com/folder/path/to/service/

但我的客户正在打电话:

http://mywebsite.com/folder/path/to/service

服务器上的 .htaccess 将此读取为 301 GET 重定向到正确的 URL,并删除了 POST 数据。简单的解决方案是仔细检查 url 路径

@C.Ovidiu、@MarcB - 你们两个为我节省了大量调试时间!

【讨论】:

这是我自己的情况,我自己永远也想不出来,谢谢分享!【参考方案6】:

你应该检查你的 .htaccess 文件,用“#”符号关闭行

# To externally redirect /dir/foo.php to /dir/foo
# RewriteCond %THE_REQUEST ^[A-Z]3,\s([^.]+)\.php [NC]
# RewriteRule ^ %1/ [R,L]

【讨论】:

【参考方案7】:

我尝试了很多东西,但我发现下面的代码适合我:

if ( $_SERVER['REQUEST_METHOD'] == 'POST' && empty($_POST) ) 
    $_POST = json_decode(file_get_contents('php://input'), true);

如果你愿意,这将起作用。

【讨论】:

以上是关于jQuery AJAX/POST 不向 PHP 发送数据的主要内容,如果未能解决你的问题,请参考以下文章

jQuery - 在 AJAX POST 之后访问 PHP 数组值

PHP怎么接收jQuery的Ajax post过来的值?

使用 jQuery ajax post 接收 PHP 参数

如何使用 jQuery AJAX $.post 存储 PHP $_SESSION 变量?

参考 jQuery .ajax Post 来运行

jQuery AJAX Post 不工作