0

我有一个问题是我显示了一系列对话或相互提供的 AJAX 结果。例如。用户点击发送消息,触发 ajax 调用,对话框打开,用户填写表单并发送,对话框关闭,表单通过 AJAX 提交,然后另一个 AJAX 响应将打开对话框或重定向用户. 此过程在所有浏览器中显示第一个对话,但在 Safari 和 Chrome 中显示第二个对话错误。我 95% 确定它在所有浏览器中都能正常工作。现在似乎失败了。触发错误函数,然后浏览器将打开用于第二个 AJAX 请求的 URL。

我正在使用 jquery、PHP 和 javascript,并通过 eval(json) 命令运行它。从那以后,我重构了代码以返回原始 Javascript。

在任何情况下,错误都会在 AJAX 查询的“错误”处理程序上触发。返回的错误信息非常少。我知道 Chrome 有一个缓存过程,但不确定如何影响它或者它是否存在于 safari 中。无论如何,在运行返回的 javascript 之前,ajax 的第二次调用似乎在 safari 和 chrome 中失败。我相信它以前在所有浏览器中都有效,但我现在不太确定。我已经花了将近半天的时间,因此我将不胜感激。:D

用于运行 AJAX 调用的 Javascript 函数如下

function page(url){
     $.ajax({
            type: "POST",
            url: url,
            success : ajaxReturn,
            cache: false,
            dataType: 'script',
            error: function(result, status, err) {
                alert('HTTP ' + result.status + ' Error Encountered: ' + result.statusText);
                alert(result.responseText);
                alert('status: '+status+' error: '+err);
            return;
            }
        });

}

function ajaxReturn(ret){   
    eval(ret);
    $.unblockUI();
}

这与两个 AJAX 调用使用的代码相同。在某些情况下(即,如果在表单中发现错误),返回代码实际上是完全相同的。我有一个用于所有对话、AJAX 和相关进程的系统,到目前为止它一直运行良好。

我从错误处理程序返回的消息是:

HTTP 0 Errpr Encountered: error

然后

<null>

然后

status:error error:

通过警报语句输出。哪里是空对话。因此,由于运行相同的 ajax 函数并返回相同的代码,Chrome 和 Safari 在第二次调用时遇到了问题。无论返回什么,它们都在错误处理程序上失败,我不知道为什么。

4

1 回答 1

1

好的,所以我发现了问题。对话中的表单内容是通过另一个 AJAX 调用提交的。因此,来自内容中的 onsubmit 处理程序通过 jquery 进行序列化,然后发送到 AJAX。问题是我在 onsubmit 处理程序中的 AJAX 调用之后没有包含 return false 。因此,由于某种原因,在 chrome 和 safari 上,这将返回错误状态 0,然后在通过 AJAX 调用的页面上转发给我。

任何情况下都返回 false 修复它。甜的!

于 2012-05-03T04:07:25.510 回答