【问题标题】:Safari error. Javascript ajax json object - could not fetch properties. object may no longer existSafari 错误。 Javascript ajax json 对象 - 无法获取属性。对象可能不再存在
【发布时间】: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


【解决方案1】:

事实证明,表单发布的页面正在重新加载,出于某种原因,Google Chrome 正在为我处理这个问题,而 Safari 和 IE 则没有。

我在表单中添加了以下 onsubmit 评论:

<form id="Project" name="projectForm" onsubmit="return false;">

当我单击提交按钮并运行 javascript 时,它阻止它执行。

为了完整起见,这里是提交:

<input type="submit" class="submit" id="projectSubmit" onclick="insertProjectData()" value="Save Project">

所以不出所料,简单的事情到底...

【讨论】:

    猜你喜欢
    • 2016-06-30
    • 1970-01-01
    • 2016-11-08
    • 2021-03-08
    • 2011-08-16
    • 2019-07-30
    • 1970-01-01
    • 2021-10-29
    • 2014-04-23
    相关资源
    最近更新 更多