AJAX POST请求丢失

时间:2020-05-20 13:48:09

标签: php jquery ajax

尝试将AJAX请求实施到我没有创建的现有网站时遇到问题。

我没有问题,可以将数据作为GET请求发送到PHP,但是POST请求和尝试访问$ _FILES的操作都返回null。

这是AJAX:

class Card {
  constructor(suit, value) {
    this.suit = suit;
    this.value = value;
  }
}

class Deck {
  constructor() {
    const suits = ["H", "D", "S", "C"];
    const values = ["A", 2, 3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K"];
    this.cards = [];
    suits.forEach(suit =>
      values.forEach(value => {
        const newCard = new Card(suit, value);
        this.cards.push(newCard);
      })
    );
  }
  drawCard() {
    if (!this.cards.length) return false;
    const cardIndex = Math.floor(Math.random() * this.cards.length);
    return this.cards.splice(cardIndex, 1)[0];
  }
}

PHP:

var someData = 'test';

$.ajax({
    url: "post-data.php",
    method: "POST",
    dataType: "JSON",
    data: ({someData}),
    success: function(data) {
        console.log(data);
    }
});

我认为问题的原因可能在于htaccess文件中,或者与站点上其他一些重定向有关。该网站是由该公司的一名前员工建立的,而我在使用AJAX POST和他们建立的其他几个网站时遇到了同样的问题。

从POST更改为GET可以正常工作,我认为我非常简单的代码没有任何问题。

我是否可以通过某种方法测试数据是否由于重定向而丢失,或者是否有其他原因?

2 个答案:

答案 0 :(得分:0)

首先检查浏览器开发工具ctr + shift + J,看是否有重定向。如果没有的话 您需要将数据类型设置为json,并且根据您使用的JQUERY版本,如果您的JQUERY版本<1.9.0

,则可能必须使用“ type”而不是“ method”
    var someData = 'test';
    $.ajax({
         url: "post-data.php",
         method: "POST",
         dataType: "json",
         data: ({someData}),
         success: function(data) {
             console.log(data);
         }
      });

PHP代码:

     header("Content-Type: application/json", true);

如果这不起作用,请确保您的URL绝对正确。没有多余的斜杠或空格。

答案 1 :(得分:0)

我设法弄清楚了,对于所有.php扩展都有302重定向到没有扩展名的url。我的代码中也有错误。

将AJAX中的URL更改为不带.php扩展名的“后数据”,使我可以在PHP中看到$ _POST。

我无法访问文件的另一个问题归结为我尝试使用AJAX发送FormData的方式。

我执行此操作的原始代码是:

var someData = 'test';
var fData = new FormData();

fData.append("images", $("input[name='fileUpload']").prop("files")[0]);

$.ajax({
    url: "post-data.php",
    method: "POST",
    dataType: "JSON",
    contentType: false,
    processData: false,
    data: ({someData, fData}),
    success: function(data) {
        console.log(data);
    }
});

问题是您不能同时发送FormData和其他变量。相反,我必须将其他数据附加到FormData:

var someData = 'test';
var fData = new FormData();

fData.append("images", $("input[name='fileUpload']").prop("files")[0]);
fData.append("someData", someData);

$.ajax({
    url: "post-data.php",
    method: "POST",
    dataType: "JSON",
    contentType: false,
    processData: false,
    data: fData,
    success: function(data) {
        console.log(data);
    }
});