这是我当前每5分钟发送一次请求的Javascript代码。
function sendRequest() {
$(document).ready(function() {
console.log($.post('../notify/notify.php', { notify: 1 }).done());
});
}
setInterval(function() {
console.log(sendRequest());
}, 5000);
当我再检查网络中的开发工具,该请求被发送,并且预期正在返回的响应。这是我的PHP代码:
header('Content-Type: application/javascript');
if(isset($_POST['notify']) && $_POST['notfiy'] == "1") {
echo json_encode(array(
'Title' => 'Welcome to our Site',
'Message' => 'You are current recieving notifications.',
'Location' => 'http://example.com/',
'State' => true
),true);
} else {
echo json_encode(array(
'State' => false
), true);
}
然而,当我检查控制台我看到它是一个类型Object {readyState: "1"}
,当我然后将其展开,在预期的响应包裹内responseText
场。然而,console.log()
收益不确定的,当我追加.responseText
到的结束$.post().done()
。
我究竟做错了什么?如何从PHP文件中获得响应?
更新:
复习了这些问题之后,我得知我header()
声明了错误。该类型应该是/json
没有/javascript
。而且,响应不可读,因为如前所述,我只记录了请求的承诺。我需要添加一个function(param)
我的内部done()
函数,然后使用该响应里面。
我究竟做错了什么?
您正在将异步调用包装在console.log()
,.responseText
或.responseJSON
之中$.post()
,或者将$.post()
异步调用的回调函数的参数记录在console
。
console.log()
不等待进行或完成异步调用。console.log()
将记录返回的jQuery Promise对象$.post()
但是,当我检查控制台时,我看到它是一种类型
Object {readyState: "1"}
不.responseText
或.responseJSON
所述的属性jxXHR
对象
返回值:jqXHR
.done()
接受一个单独的功能或功能,在这里可以包括一个数组console.log()
函数体内记录的异步操作的结果$.post()
被设定为在回调函数的第一个参数。.responseText
或者.responseJSON
是作为第三个参数的属性进行访问.done()
。
.done(function(data, textStatus, jqxhr) {
console.log(data, jqxhr.responseJSON)
})
您也可以设定Content-Type
headers
为php
以"application/javascript"
,虽然你echo
的array
距离php
。headers
应设置为"application/json"
。$.post()
接受这是预期的第三参数Content-Type
或dataType
响应的; 在这里"json"
。
// declare variable `interval` for ability to call `clearInterval(interval)`
var interval;
function sendRequest() {
return $.post('../notify/notify.php', { notify: 1 }, "json")
.done(function(data) {
console.log(data)
})
// handle error
.fail(function(jqxhr, textStatus, errorThrown) {
console.log(errorThrown)
});
}
$().ready(function() {
sendRequest().then(function() {
interval = setInterval(sendRequest, 5000);
})
})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句