我为自己创建了一个小项目。我不是一个非常有经验的程序员,所以我开始用PHP创建项目。很快,很明显通过HTML按钮点击运行PHP函数和类方法并不是最简单的任务。
我设置了一些测试代码。首先,我创建了一个HTML表单,我想从中读取用户输入值:
<form name="form" action="" method="POST">
Title: <br> <input type="text" id="title"> <br>
Description: <br> <input type="text" id="description"> <br>
Priority: <br> <input type="number" id="priority"> <br> <br>
<input type="button" id="ajaxTest" value="Send>
</form>
现在,当单击id为#ajaxTest的按钮时,我想调用我创建的PHP文件中的一个类方法。为此,我用Google搜索并最终获得了以下jQuery:
<script type="text/javascript">
$("#ajaxTest").click( function() {
$t = $("#title").val();
$.ajax({
type: "POST",
url: "http://www.example.com/task.php",
data: "t="+t
}).done(function(results) {
$("#results").html(results).hide().fadeIn();
})
});
</script>
在HTML中还有一个id为#results的div元素,用于显示结果数据。
现在,被调用的task.php如下所示(为了便于阅读而简化):
<?php
class Task {
private $title;
private $description;
function SetTitle($t) {
$this->title = $t;
}
function GetTitle() {
return $this->title;
}
function SetDescription($d) {
$this->description = $d;
}
function GetDescription() {
return $this->description;
}
}
我如何通过jQuery / AJAX调用此类的不同成员函数并获取其返回值以输入DOM?我认为我必须创建一个像TaskHandler这样的中间类来启动对象等等,但我完全失去了。几乎一整天都在这里,但我没有找到能够引导我找到合适解决方案的答案。非常感谢你的帮助!
编辑:我现在编辑了jQuery,它看起来如下:
<script type="text/javascript">
$("#ajaxTest").click( function() {
var t = $("#title").val();
$.ajax({
type: "POST",
url: "http://www.example.com/taskHandler.php",
data: {"t": t},
success: function(response) {
$("#results").html(response);
}
});
});
</script>
和taskHandler.php在
之下<?php
require_once("task.php");
$t = new Task();
$t->SetTitle($_POST['t']);
$output = $t->GetTitle();
echo $output;
但是,仍然没有得到任何东西。我在这里做错了什么?
答案 0 :(得分:2)
关于这个问题的长评论列表,只有一件事可能搞乱了AJAX电话:
<form name="form" action="" method="POST">
Title: <br> <input type="text" id="title"> <br>
Description: <br> <input type="text" id="description"> <br>
Priority: <br> <input type="number" id="priority"> <br> <br>
<input type="submit" id="ajaxTest" value="Submit">
</form>
提交按钮通常会提交整个表单。当提供空操作参数时,后置操作将转到当前页面。这将立即重新加载,并中断可能已发出但未完全发送的AJAX请求。
变化:
<form name="form" action="" method="POST">
Title: <br> <input type="text" id="title"> <br>
Description: <br> <input type="text" id="description"> <br>
Priority: <br> <input type="number" id="priority"> <br> <br>
<input type="button" id="ajaxTest" value="Send">
</form>
答案 1 :(得分:2)
最后一个问题在于AJAX请求,因为格式化,Web浏览器将其视为跨域。实际上它在同一个领域工作。
url: "http://www.example.com/taskHandler.php",
我一改为
url: "taskHandler.php"
它开始工作了。
感谢大家的投入!我在这里学到了很多东西,试图解决这个问题。
答案 2 :(得分:0)
执行以下步骤:
如果您希望每个请求只调用一个后端方法,请考虑只允许其中一个字段进行输入:'title'
或'description'
。
*** js part:
<script type="text/javascript">
$("#ajaxTest").click(function(e) {
e.preventDefaut();
var title, desc, type;
if (title = $("#title").val().trim()){
type = 'title';
} else if (desc = $("#description").val().trim()){
type = 'description';
}
$.ajax({
type: "POST",
url: "http://www.example.com/task.php",
data: {'action': type, 'value': title || desc} // 'value' is for setting certain property, to return an existing property send only 'action' param
}).done(function(results) {
$("#results").html(results).hide().fadeIn();
})
});
</script>
php部分: 的 task.php 强>
<?php
class Task {
private $title;
private $description;
function SetTitle($t) {
$this->title = $t;
}
function GetTitle() {
return $this->title;
}
function SetDescription($d) {
$this->description = $d;
}
function GetDescription() {
return $this->description;
}
}
if (isset($_POST['action']) && !empty($_POST['action'])){
$action = $_POST['action'];
$value = (isset($_POST['value']) && !empty($_POST['value']))? $_POST['value'] : null;
$task = new Task();
$method = (($value)? 'Set' : 'Get') . ucfirst($action);
if method_exists($task, $method){ // BTW - method name should start with a lowercase letter
$result = ($value)? $task->$method($value) : $task->$method();
echo ($result)? $result : "";
return;
}
}
答案 3 :(得分:0)
您复制了getTitle方法:
class Task {
private $title;
private $description;
function SetTitle($t) {
$this->title = $t;
}
function GetTitle() {
return $this->title;
}
function SetDescription($d) {
$this->description = $d;
}
function GetTitle() {
return $this->description;
}
}
我建议你将php文件作为单独的文件进行测试,例如:
$text = "test";
class Task {
private $title;
private $description;
function SetTitle($t) {
$this->title = $t;
}
function GetTitle() {
return $this->title;
}
function SetDescription($d) {
$this->description = $d;
}
function GetDescription() {
return $this->description;
}
}
$t = new Task();
$t->SetTitle($text);
$output = $t->GetTitle();
echo $output;
因此,您将确定php文件是否没有错误。
同样在html / javascript中添加console.log(inputValue)
以查看您发送的内容。
如果一切正常,请执行$t->SetTitle($_POST['title']);