Javascript 2 Jquery ajax post请求。第二个给出错误:error[ERR\u HTTP\u HEADERS\u SENT]:发送到客户端后无法设置头
我首先有一个Javascript 2 Jquery ajax post请求。第二个给出错误:error[ERR\u HTTP\u HEADERS\u SENT]:发送到客户端后无法设置头,javascript,jquery,node.js,ipfs,js-ipfs,Javascript,Jquery,Node.js,Ipfs,Js Ipfs,我首先有一个GET请求来检索数据结构。然后我执行一些更改并执行一个PUT请求,将数据结构发送到服务器并更新记录。当我在第一个表单上单击上的submit按钮时,它会按预期工作;当我提交第二个表单时,它会按预期执行,但它会记录2个错误。此外,当我连续进行2次编辑时,它会使应用程序崩溃,并给出一个RangeError:Maximum call stack size Oversed错误。与RangeError:Maximum call stack size Exchanged错误相关的代码位于底部
GET
请求来检索数据结构。然后我执行一些更改并执行一个PUT
请求,将数据结构发送到服务器并更新记录。当我在第一个表单上单击上的submit按钮时,它会按预期工作;当我提交第二个表单时,它会按预期执行,但它会记录2个错误。此外,当我连续进行2次编辑时,它会使应用程序崩溃,并给出一个RangeError:Maximum call stack size Oversed
错误。与RangeError:Maximum call stack size Exchanged
错误相关的代码位于底部
以下是我的客户端脚本:
<script>
const capitalize = ([first, ...rest]) =>
${first.toUpperCase()}${rest.join('')};
let patientDataRetrieved = false;
let _xhr,_xhr2 = null;
let patientID ;
let first_name;
let last_name;
let email;
let sex;
let date_of_birth;
let patient_phone;
let marital_status;
let emergency_contact1_rel ;
let emergency_contact1_phone;
let emergency_contact2_rel ;
let emergency_contact2_phone;
let spouse_phone;
$("body").on("contextmenu",function(e){
return false;
});
$('body').bind('cut copy ', function (e) {
e.preventDefault();
});
document
.getElementById("search")
.addEventListener("submit",ev => {
ev.preventDefault();
patientID = ev.target.patientID.value;
let uid = patientID;
getPatientDetails()
function getPatientDetails(){
if(_xhr2!= null)
_xhr2.abort();
if(patientDataRetrieved===false){
$(document).ready(()=>{
_xhr = $.ajax({
url: '/profile/'+uid,
type: 'GET',
cache: false,
success: function(data){
//Instantiate Variables of User Data
let userdata = data;
console.log(userdata);
first_name = userdata.first_name;
last_name = userdata.last_name;
sex = userdata.sex;
email = userdata.email;
let blood_type = userdata.blood_type;
date_of_birth = userdata.date_of_birth;
spouse_phone = userdata.spouse_phone;
patient_phone = userdata.patient_phone;
marital_status =userdata.marital_status;
spouse_phone = userdata.spouse_phone;
emergency_contact1_rel = userdata.emergency.contact1.relationship;
emergency_contact1_phone = userdata.emergency.contact1.phone;
emergency_contact2_rel = userdata.emergency.contact2.relationship;
emergency_contact2_phone = userdata.emergency.contact2.phone;
let chronic_illnesses = userdata.chronic_illnesses;
let past_surgeries = userdata.past_surgeries;
let allergies = userdata.allergies;
let long_term_medication = userdata.long_term_medication;
//Append User Data to respective td in table
$(".firstname").append(capitalize(first_name));
$(".lastname").append(capitalize(last_name));
$("#blood_type").val(blood_type);
$(".sex").append(capitalize(sex));
$(".date_of_birth").append(date_of_birth);
$(".patient_phone").append(patient_phone);
$(".marital_status").append(capitalize(marital_status));
$(".spouse_phone").append(spouse_phone);
$(".emergency_contact1_rel").append(capitalize(emergency_contact1_rel));
$(".emergency_contact1_rel").append(", Phone: "+emergency_contact1_phone);
$(".emergency_contact2_rel").append(capitalize(emergency_contact2_rel));
$(".emergency_contact2_rel").append(", Phone: "+emergency_contact2_phone);
$("#chronic_illnesses").val(chronic_illnesses);
$("#past_surgeries").val(past_surgeries);
$("#allergies").val(allergies);
$("#long_term_medication").val(long_term_medication);
document.getElementById("patientData").style.display ="block";
patientDataRetrieved = true;
return true;
}
, error: function(jqXHR, textStatus, err){
alert('text status '+textStatus+', err
'+err)
}
});
});
}
}
});
document.getElementById("editForm").addEventListener("submit", ev =>{
ev.preventDefault();
updatePatientInfo()
function updatePatientInfo() {
if(_xhr!=null){_xhr.abort()}
let formData = {
first_name: first_name,
last_name: last_name,
email: email,
blood_type: $("#blood_type").val(),
sex: sex,
date_of_birth:date_of_birth,
patient_phone:patient_phone,
marital_status:marital_status,
spouse_phone: spouse_phone,
emergency_contact1_relationship:emergency_contact1_rel,
emergency_contact1_phone:emergency_contact1_phone,
emergency_contact2_relationship:emergency_contact2_rel,
emergency_contact2_phone: emergency_contact2_phone,
chronic_illnesses: $("#chronic_illnesses").val(),
past_surgeries: $("#past_surgeries").val(),
allergies: $("#allergies").val(),
long_term_medication: $("#long_term_medication").val(),
uid: patientID,
};
_xhr2 = $.ajax({
url: "/edit_record_process",
type: "PUT",
data: formData,
datatype:"text",
encoded:true,
cache: false,
success:function(data){
if(data){
window.location.reload()
}
},
error: (err)=>{
alert(err);
}
});
}
});
IPFS API代码:
const sendFileToNet = async (file_data) => {
const cid = function (data) {
return client.add(data).then(cid =>{return cid;}).catch(err=>{
console.log(err)})
}
const real_cid = await cid(file_data);
return real_cid;
}
const getFileFromNet = async (cid) =>{
const stream = client.cat(cid)
let data = ''
for await (const chunk of stream) {
// chunks of data are returned as a Buffer, convert it back to a
string
data += chunk.toString()
}
return data;
}
您的第二个ajax不依赖于成功数据的结果。在jQuery文档中,它表示“如果请求成功,将调用一个函数。” 这意味着您已成功发送请求。你不是在操纵成功的结果。 你需要像这样的东西
success:function(data){
if(data.result){
location.reload();
}
}
第138行server.js中的服务器端似乎出现了错误。因此,回答您的问题需要该代码。
res.send(return\u data)代码>是引用的内容。你认为这两个响应会互相阻塞吗?就像我说的,请提供服务器代码。我添加了服务器端代码。/profile响应第一个请求,/edit_用户响应第二个请求。哪一行是第138行?我试过了,但没用。
success:function(data){
if(data.result){
location.reload();
}
}