无法获得发布请求的响应

贾夸

这是我当前每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()函数,然后使用该响应里面。

客人271314

我究竟做错了什么?

您正在将异步调用包装在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 headersphp"application/javascript",虽然你echoarray距离phpheaders应设置为"application/json"$.post()接受这是预期的第三参数Content-TypedataType响应的; 在这里"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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章