尝试将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可以正常工作,我认为我非常简单的代码没有任何问题。
我是否可以通过某种方法测试数据是否由于重定向而丢失,或者是否有其他原因?
答案 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);
}
});