【问题标题】:Strange behavior sending data through Ajax to PHP通过 Ajax 向 PHP 发送数据的奇怪行为
【发布时间】:2015-03-27 03:15:05
【问题描述】:

我正在使用以前网站中使用的自己的 php 代码库构建网站,但 2 个月后,我使用了相同的库,并且正在发生一些事情,接收 PHP 文件中的数据以使用 jQuery 处理信息ajax,我真的不明白错误:

当我发送数据时,在 Google Chrome 开发者工具的表单数据选项中,仅显示带有数据的字段文本,但是当我使用 var_dump() 打印此 POST 数据时,会打印所有这些文本:

关于 Javascript 代码,就是这样一个简单的 ajax 代码:

var doFunction = function($form)
{

var form_data =  $form.serialize();

var data = {
    form: form_data,
    tag: 'save'
};

$.ajax({
    url: 'routes.php',
    type: 'post',
    dataType: 'json',
    data: data
})
.done(function(data) {

})
.fail(function(jqXHR) {

})
.always(function() {

});

return false;
}

而 PHP 代码只是一个 var_dump($_POST);只是为了检查数据。关于错误的简单解释就像我正在发送这些数据:

Name: 'My Name',
Tag: 'save'

PHP 代码正在显示

My name: 'Name',
save: 'Tag'

或者类似的东西。

我希望你能帮助我。

【问题讨论】:

  • 您可以尝试将数据更改为仅序列化的形式吗? var data = $form.serialize(); ?
  • 是的,我试过了,甚至用 serializeArray();但结果相同。
  • 您的代码看起来很好,并且 php 端正在按预期输出变量。 PHP 响应的第一行证实了这一点 - 变量作为数组输出。但是,您说服务器端代码仅为var_dump($_POST);。然而,这并不能解释所有额外的 php 错误——只有在有更多代码的情况下才会存在。检查您的服务器端代码是否正确。
  • 您应该向我们展示表单和相应的 php 文件,我可以看到表单数据没有必填字段。

标签: php jquery ajax post


【解决方案1】:

您错误地将数据发送到 PHP。这是你搞砸的部分:

var data = {
    form: form_data,
    tag: 'save'
};

不要这样做,这样做会起作用:

var data = form_data + "&tag=save"

基本上发生的事情是您混合了两种不同的格式。 serialize 函数返回一个字符串,其中键值对由 & 号分隔。但是,当您添加标签:“保存”时,您使用的是 javascript 对象。

由于您将它们都混合在一起,因此您只需将 2 个 post 变量发送到您的 php 脚本。 $_POST['form'] 是一个字符串,其键值对由与号 (&) 和 $_POST['tag'] 分隔,设置为“保存”。

您的 PHP 脚本看起来将“nombre”视为不存在的 POST 变量,并发出通知。

【讨论】:

  • 发送数据的结构没问题,问题是不能在 Chrome 上工作,但在其他浏览器上工作得很好。我仍然不知道为什么,但现在它可以工作了。
猜你喜欢
  • 2018-03-31
  • 2017-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
  • 2021-01-16
  • 2017-05-20
相关资源
最近更新 更多