我有一个页面,我正在尝试进行AJAX调用,但它无法正常工作,我很难过为什么。我的电话是:
$.ajax({
type: "GET",
url: "<relative URL>/index.php?action=x",
dataType: "JSON"
}).success(function(person) {
alert(person.name) //alerts naem
});
return false;
});
和PHP是:
<?
if($_GET["action"] == "x"){
$person = array("name"=>"Jon Doe","Reputation"=>"Good");
header("Content-Type: application/json");
echo json_encode($person);
}
?>
我不认为问题是错误的URL,因为它是工作调用的c / p。在我看来(但我不确定)它选择在最初加载源页面时重用旧的“动作值”。出于某种原因,它完全忽略了我的行动价值......?
有什么想法吗?
答案 0 :(得分:0)
尝试将PHP移动到自己的文件而不是index.php中,我假设它是您的主要PHP文件。
$.ajax({
type: "GET",
url: "/ajax.php?action=x",
dataType: "JSON",
success: function (person) {
console.log(person.name);
}
});
这应该是一个单独的文件。称之为ajax.php为例。
<?
// ajax.php
if($_GET["action"] == "x"){
$person = array("name"=>"Jon Doe","Reputation"=>"Good");
die(json_encode($person));
}
?>
只需确保ajax.php位于项目的路线中,这应该可行。如果没有,请检查console.log。
答案 1 :(得分:0)
尝试将变量移动到“数据”中:
$.ajax({
type: "GET",
url: "<relative URL>/index.php",
data: "action=x",
success: function (person) {
console.log(person.name);
}
});
答案 2 :(得分:0)
由于您使用get参数调用index.php
,可能回显json_encode ,然后继续输出if语句之后的所有其他内容。< / p>
试试这个?
<?
if($_GET["action"] == "x"){
$person = array("name"=>"Jon Doe","Reputation"=>"Good");
header("Content-Type: application/json");
echo json_encode($person);
exit;
}
?>
我假设您在if语句下面的index.php
中有更多内容。如果是这样,那么将需要exit;
语句,以便您只回显json而不是if语句之后的任何内容。
可以在Google Chrome的网络标签下的Google工具开发工具中查看ajax响应。
我们说你没有exit;
声明:
<?
if($_GET["action"] == "x"){
$person = array("name"=>"Jon Doe","Reputation"=>"Good");
header("Content-Type: application/json");
echo json_encode($person);
}
?>
<html>
<head></head>
<body>
...etc, etc
Dev工具下的ajax响应看起来像这样:
{"name":"Jon Doe","Reputation":"Good"}<html><head></head><body>... and so on
然后尝试将$ .ajax解析为JSON对象。
但这是不可能的,因为<html><head></head><body>...
无效JSON。
希望这有帮助!