我有一个页面,我正试图从中进行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的工作呼叫。在我看来(但我不确定),它选择重用最初加载源页面时的旧"操作值"。出于某种原因,它完全忽略了我的行动价值…?
有什么想法吗?
尝试将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。
尝试将变量移动到"数据":
$.ajax({
type: "GET",
url: "<relative URL>/index.php",
data: "action=x",
success: function (person) {
console.log(person.name);
}
});
由于使用get参数调用index.php
,因此可能正在回显json_encode,然后在if语句之后继续输出其他所有内容。
试试这个?
<?
if($_GET["action"] == "x"){
$person = array("name"=>"Jon Doe","Reputation"=>"Good");
header("Content-Type: application/json");
echo json_encode($person);
exit;
}
?>
我假设您在下面的index.php
中有比if语句更多的内容。如果是这样,则需要exit;
语句,以便只回显json,而不回显If语句之后的任何内容。
ajax响应可以在Google Chrome的开发工具中的"网络"选项卡下查看
<小时>假设您没有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
开发工具下的ajax响应如下所示:
{"name":"Jon Doe","Reputation":"Good"}<html><head></head><body>... and so on
然后将尝试由$.ajax解析为JSON对象。
但这是不可能的,因为<html><head></head><body>...
不是有效的JSON。
希望这能有所帮助!
小时>