从AJAX返回/筛选值的正确方法'd PHP脚本
Proper Way to Return/Filter Values from AJAX'd PHP Script?
考虑以下内容:
<?php
//daytime_check.php
$is_daytime = false;
if ($is_daytime) {
echo '1';
} else {
echo '0';
}
?>
=================================================
// javascript/jQuery
$.ajax({
type: 'POST',
url: 'daytime_check.php',
success: function(response) {
if(response == false) {
alert('Goodnight, brother');
} else {
alert('Day''s a wastin, brother');
}
},
error: function() {
//handle error
}
});
这就是我迄今为止处理AJAX PHP脚本响应的方式。我希望有人能给我一些更好的方法的提示,因为目前的方法感觉很笨重。
特别笨拙的是在JS端处理PHP脚本输出的"过滤"。例如:
在这种情况下,PHP的响应将是JS var response ='0'
。现在不能简单地在JS中使用if (!response)...
进行过滤,因为显然!response
的求值结果是false
,而有趣的是,response == false
的求值结果却是true
。我想这与打字杂耍有关。
由于我从PHP返回内容的唯一方法是在文本中(echo
语句),所以当我到达JS端时,我无法返回正确的true/false值进行过滤。有更好的方法来处理这个问题吗?
我希望这至少有点道理。
您仍然可以返回任何您想要的类型。只需使用JSON响应。
// you can return what ever you want via JSON
die(json_encode(array(
'isDateTime' => $is_datetime,
'message' => 'Some optional message to display',
'timestamp' => time()
)));
这将输出以下字符串:
{"isDateTime":false,"message":"Some optional message to display","timestamp":1332792739}
在客户端,jQuery将解析此响应:
$.ajax({
type: 'POST',
url: 'daytime_check.php',
dataType: 'json',
success: function(response) {
if (response.isDateTime) { ... }
// typeof response.isDateTime == 'boolean'
// alert(response.message)
},
error: function() {
//handle error
}
});
如果您只需要在成功处理程序中显示消息,那么为什么不返回消息本身呢?
<?php
//daytime_check.php
$is_daytime = false;
if ($is_daytime) {
echo "Day's a wastin', brother";
} else {
echo "Goodnight, brother";
}
?>
$.ajax({
type: 'POST',
url: 'daytime_check.php',
success: function(response) {
alert(response);
},
error: function() {
//handle error
}
});
这是一位聪明的前同事提供的一个巧妙的解决方案。
以以下方式从PHP脚本返回值:
<?php
// To return an error
echo json_encode(
array(
'success' => false,
'message' => '[error message here]',
)
);
// To return a successful response
echo json_encode(
array(
'success' => true,
'response' => [return value here],
)
);
这样,我们就可以很容易地在JS端做逻辑:
$.ajax({
type: 'POST',
url: 'ajax_example.php',
success: function(response) {
response = JSON.parse(response);
if (!response.success) {
alert(response.message);
} else {
console.log(response.response);
}
},
error: function() {
//handle error
alert('error doing ajax, mate');
}
});
相关文章:
- Dynamics 2016内部部署Crm客户端脚本.选项集控件类型缺少方法
- 有没有一种方法可以用YepNope.js为脚本提供动态名称
- java安全doPrivileged方法如何阻止任意脚本
- I'我用setTimeout加载脚本,你能找到一个更快的方法吗
- 有没有一种方法可以生成Braintree令牌,而不必向我的服务器添加PHP脚本
- 有没有一种方法可以使用<脚本>标记为您可能使用的<%%>标记
- 当用$.getScript()加载脚本时,有一种方法可以从用$.get script()装载的脚本中调用父脚本中的函数
- 使用javascript:在没有阻止html标记(<b>、<p>等)的情况下,阻止脚本的最佳方法
- 有没有更简单的方法在 Wordpress 中为多个页面模板排队脚本
- 将参数传递到外部 JS 脚本的最佳方法
- 如何从将在html页面中使用的java脚本中调用java类方法
- 为内容脚本[Chrome扩展]获取本地存储价值的简单方法
- java脚本错误对象没有'不支持此属性或方法
- 我想在用Jquery.ajax方法加载数据后在Html中运行脚本
- 谷歌应用程序脚本:如何在不使用getComment()方法的情况下将第二条注释添加到第一条注释中
- 有没有一种方法可以在使用html脚本的同时将列表实现为按钮函数
- 应用程序脚本高级驱动器API服务-newFile()方法未创建文件
- Chrome扩展:在后台页面和网站页面脚本之间进行通信的最佳方法
- 有没有办法在应用程序脚本中使用JavaScript为对象创建方法字典
- 使用 Angularjs 加载 JavaScript 脚本的最佳方法是什么?