Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将JSON发送到服务器并检索JSON,而不使用JQuery_Javascript_Json_Post_Get_Xmlhttprequest - Fatal编程技术网

Javascript 将JSON发送到服务器并检索JSON,而不使用JQuery

Javascript 将JSON发送到服务器并检索JSON,而不使用JQuery,javascript,json,post,get,xmlhttprequest,Javascript,Json,Post,Get,Xmlhttprequest,我需要向服务器发送一个JSON(我可以将其字符串化),并在用户端检索生成的JSON,而无需使用JQuery 如果我应该使用GET,如何将JSON作为参数传递?是否存在时间过长的风险 如果我应该使用POST,如何设置GET中的onload函数的等效项 或者我应该使用不同的方法 备注 这个问题不是关于发送一个简单的AJAX。不应将其作为副本关闭。使用POST方法发送和接收JSON格式的数据 使用GET方法发送和接收JSON格式的数据 使用PHP在服务器端处理JSON格式的数据 HTTP Get请

我需要向服务器发送一个JSON(我可以将其字符串化),并在用户端检索生成的JSON,而无需使用JQuery

如果我应该使用GET,如何将JSON作为参数传递?是否存在时间过长的风险

如果我应该使用POST,如何设置GET中的
onload
函数的等效项

或者我应该使用不同的方法

备注

这个问题不是关于发送一个简单的AJAX。不应将其作为副本关闭。

使用POST方法发送和接收JSON格式的数据 使用GET方法发送和接收JSON格式的数据 使用PHP在服务器端处理JSON格式的数据

HTTP Get请求的长度限制取决于所使用的服务器和客户端(浏览器),从2kB到8kB。如果URI的长度超过服务器可以处理的长度,服务器应返回414(请求URI太长)状态

注意有人说我可以使用州名称而不是州值;换句话说,我可以使用
xhr.readyState===xhr.DONE
而不是
xhr.readyState==4
问题是Internet Explorer使用不同的状态名称,因此最好使用状态值。

使用新api:

const dataToSend=JSON.stringify({“email”:”hey@mail.com“,”密码“:“101010”});
设dataReceived=“”;
取回(“{
凭据:“相同来源”,
模式:“同源”,
方法:“张贴”,
标题:{“内容类型”:“应用程序/json”},
正文:dataToSend
})
。然后(resp=>{
如果(各自状态===200){
return resp.json()
}否则{
控制台日志(“状态:+响应状态”)
返回承诺。拒绝(“服务器”)
}
})
。然后(dataJson=>{
dataReceived=JSON.parse(dataJson)
})
.catch(错误=>{
如果(错误==“服务器”)返回
console.log(错误)
})

log(`Received:${dataReceived}`)
您需要使用
XMLHttpRequest
。不管名称如何,您可以将其用于JSON数据(实际上jQuery在后台就是这样做的)。看看这个:。它显示了如何使用vanilla JS获取/发布数据。@Ed Cottrell引用的问题与此无关。参考文献中介绍了(只是)
发送一个ajax请求,这是一个非常普遍的事情。这一个要求在纯JavaScript中
发送
但是
接收JSON
。此外,为了将此JSON发回,您必须知道如何解决
服务器端的这部分问题,这是参考问题中没有提到的另一件事。@Ed Cottrell您提到的问题没有经过批准的答案,并且使用旧方法创建Ajax请求。它没有提供这个问题的完整答案。我的问题比传统的Ajax POST或GET更微妙。您没有抓住要点。@JVerstry
onreadystatechange
是您用来模拟
onload
,如下面接受的答案所示。对于解析,您只需使用
JSON.parse()
(同样,如答案所示),但我假设您已经知道,因为您在问题中提到了字符串化。我试图帮助你,不是指1个问题,而是指2个涉及这些问题的问题。这两个问题显然有些不同——很少有两个问题完全相同——但如果您已经知道如何字符串化和解析JSON,这就很简单了。也就是说,由于您和@hex4949不同意,我建议重新打开它。应该是
xhr.status==200
。我使用相同的代码将JSON数据发布到本地主机托管的REST API,但得到错误
xhr加载失败:post
@viveksinghggits First,检查上面的代码是否在本地主机上工作。如果它真的存在(并且应该有效),那么问题一定在服务器端的某个地方;如果没有,请告诉我,我会检查的。这样,由于没有您的代码,我无法帮助您。@HEX4949非常感谢您的回复,我实际上是在表单的提交操作上启动了XHR,当我将其更改为通过单击事件启动时。我得到了CORS错误,这是可以理解的,我正在为此更改服务器端代码。我在这里写到,您使用了两次
JSON.stringify
// Sending and receiving data in JSON format using POST method
//
var xhr = new XMLHttpRequest();
var url = "url";
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function () {
    if (xhr.readyState === 4 && xhr.status === 200) {
        var json = JSON.parse(xhr.responseText);
        console.log(json.email + ", " + json.password);
    }
};
var data = JSON.stringify({"email": "hey@mail.com", "password": "101010"});
xhr.send(data);
// Sending a receiving data in JSON format using GET method
//      
var xhr = new XMLHttpRequest();
var url = "url?data=" + encodeURIComponent(JSON.stringify({"email": "hey@mail.com", "password": "101010"}));
xhr.open("GET", url, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function () {
    if (xhr.readyState === 4 && xhr.status === 200) {
        var json = JSON.parse(xhr.responseText);
        console.log(json.email + ", " + json.password);
    }
};
xhr.send();
<?php
// Handling data in JSON format on the server-side using PHP
//
header("Content-Type: application/json");
// build a PHP variable from JSON sent using POST method
$v = json_decode(stripslashes(file_get_contents("php://input")));
// build a PHP variable from JSON sent using GET method
$v = json_decode(stripslashes($_GET["data"]));
// encode the PHP variable to JSON and send it back on client-side
echo json_encode($v);
?>