【发布时间】:2018-02-25 04:50:42
【问题描述】:
我有一个对 PHP 后端的 Ajax 调用。它在 chrome 中运行良好,但是当我在 safari 中运行它时,代码中的这一行出现“无法获取属性,对象可能不再存在”错误 -
数据类型:“JSON”,
这里是函数。可能真的很简单。我实际上在网上找到了这段代码并重新调整了它的用途。不是真正的开发人员只是在捏造我的方式:)
任何提示将不胜感激!正如我所说,Chrome 中没有错误。
谢谢 戴夫
function insertProjectData() {
var projectuid=$("#projectuid").val();
var projectIdentifier=$("#projectIdentifier").val();
var projectPIRDate=$("#projectPIRDate").val();
var projectName=$("#projectName").val();
var projectManagerName=$("#projectManagerName").val();
var projectSponsorDept=$("#projectSponsorDept").val();
var projectSponsorName=$("#projectSponsorName").val();
var projectSponsorContact=$("#projectSponsorContact").val();
var projectGTMDate=$("#projectGTMDate").val();
var projectTargetBudget=$("#projectTargetBudget").val();
var projectActualCost=$("#projectActualCost").val();
var projectScope=$("#projectScope").val();
var projectScopeDelivered=$("#projectScopeDelivered").val();
if ($('#projectDeliveredTimeline').is(':checked')) {
var projectDeliveredTimeline = "Yes";
}
else {
var projectDeliveredTimeline = "No";
}
if ($('#projectDeliveredPlan').is(':checked')) {
var projectDeliveredPlan = "Yes";
}
else {
var projectDeliveredPlan = "No";
}
var projectComments=$("#projectComments").val();
// AJAX code to send data to php file.
$.ajax({
type: "POST", q
url: "insert-projectdata.php",
data: {projectuid:projectuid,projectIdentifier:projectIdentifier,projectPIRDate:projectPIRDate,projectName:projectName,projectManagerName:projectManagerName,projectSponsorDept:projectSponsorDept,projectSponsorName:projectSponsorName,projectSponsorContact:projectSponsorContact,projectGTMDate:projectGTMDate,projectTargetBudget:projectTargetBudget,projectActualCost:projectActualCost,projectScope:projectScope,projectScopeDelivered:projectScopeDelivered,projectDeliveredTimeline:projectDeliveredTimeline,projectDeliveredPlan:projectDeliveredPlan,projectComments:projectComments},
dataType: "JSON",
success: function(data) {
closeitem(projectarea);
$("#ProjectSaved").show();
setTimeout(function() { $("#ProjectSaved").hide(); }, 2500,);
$('form[name=projectForm]').get(0).reset();
window.location.replace("lessons.php");
},
error: function(err) {
console.log(err);
}
});
}
奇怪的是这个(另一个页面)工作正常!?...
function insertAreaData() {
var areauid=$("#areauid").val();
var areaName=$("#areaName").val();
var areaDesc=$("#areaDesc").val();
// AJAX code to send data to php file.
$.ajax({
type: "POST",
url: "insert-areadata.php",
data: {areauid:areauid,areaName:areaName,areaDesc:areaDesc},
dataType: "JSON",
success: function(data) {
closeitem(areaarea);
$("#AreaSaved").show();
$('form[name=AreaForm]').get(0).reset();
setTimeout(function() { $("#AreaSaved").hide(); }, 2000,);
window.location.replace("lessons.php");
},
error: function(err) {
console.log(err);
}
});
}
编辑:我现在也在 Internet Explorer 中进行了测试,并且遇到了同样的问题。
【问题讨论】:
-
流浪的
q是错字吗? setTimeout 中额外的,呢?这是您收到的确切错误消息吗? “无法获取属性,对象可能不再存在”?是这样还是你改写了? -
嗨@JoeFrambach,是的
q是一个错字,很抱歉!至于 Timeout 中的,是故意的,但这并不意味着它是正确的:) 是的,Safari 控制台中的措辞是 - 对象无法获取属性。对象可能不再存在。错误 projects.php:69 第 69 行是datatype: "JSON",行。 -
问题可能出在它发布到的 php 后端页面中吗?
-
一时兴起,您能否将
closeitem(projectarea);行注释掉,看看错误是否仍然存在?此变量不在您提供的范围内,并且 Safari 有时会在异步情况下抱怨它知道的对象已从其下方拉出。通常的解决方案是将您的成功回调包装在一个 iife 中,并将projectarea作为参数传递。如果这确实是问题,我会写一个完整的答案。 -
或者,将整个成功回调替换为
function() { console.log('this works!'); },只是为了减少可能的问题以尝试对根本问题进行三角剖分。
标签: php json ajax object safari