Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.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
Php Internet Explorer中的Ajax和JSON响应错误(适用于所有其他浏览器)_Php_Javascript_Jquery_Internet Explorer_Json - Fatal编程技术网

Php Internet Explorer中的Ajax和JSON响应错误(适用于所有其他浏览器)

Php Internet Explorer中的Ajax和JSON响应错误(适用于所有其他浏览器),php,javascript,jquery,internet-explorer,json,Php,Javascript,Jquery,Internet Explorer,Json,出于某种原因,IE要求我们下载一个文件,而不是将其作为ajax运行。这适用于除IE之外的所有浏览器。我试图搞乱它返回的标题,但运气不佳 该函数获取表单数据,然后发布响应。响应可以是页面上要更新的任意数量的项的数组 它不应该是文件,而应该只是一个json响应 PHP header('Content-type:application/json'); $error=“无法解析您输入的电子邮件和密码。”; $elements[0]['target']='。错误报告'; $elements[0]['act

出于某种原因,IE要求我们下载一个文件,而不是将其作为ajax运行。这适用于除IE之外的所有浏览器。我试图搞乱它返回的标题,但运气不佳

该函数获取表单数据,然后发布响应。响应可以是页面上要更新的任意数量的项的数组

它不应该是文件,而应该只是一个json响应

PHP

header('Content-type:application/json');
$error=“无法解析您输入的电子邮件和密码。”;
$elements[0]['target']='。错误报告';
$elements[0]['action']='inside';
$elements[0]['data']=''.$error'

'; $this->output->set\u output( json_编码(数组(“元素”=>$elements)) );
Javascript

$(document).ready(function () {
    jQuery.ajaxSetup({
        cache: false,
        dataType: 'json',
        error: function () {
            alert("Request was not successful. Please try again shortly.");
        }
    });

    $(document).ajaxSuccess(function (e, xhr, settings) {
        var response = xhr.responseText;
        if (settings.dataType != 'json') {
            return;
        };

        try {
            response = jQuery.parseJSON(response);
        } catch (e) {
            alert(e);
            return;
        }

        if (response.elements instanceof Array) {
            var reqs = ['target', 'action'];
            var valid = true;
            for (var i=0;i<response.elements.length;i++) {
                var cur = response.elements[i];
                var sel;

                for (var j=0;j<reqs.length;j++) {
                    if (typeof cur[reqs[j]] !== "string") {
                        valid = false;
                        break;
                    };
                };

                if (!valid) {
                    continue;
                };

                sel = $(cur.target);
                switch (cur.action) {
                    case "inside":
                        sel.html(cur.data);
                    break;
                    case "instead":
                        sel.replaceWith(cur.data);
                    break;
                    case "remove":
                        sel.remove();
                    break;
                    case "refreshPage":
                        window.location.reload();
                    default:
                        if (typeof sel[cur.action] === "function") {
                            sel[cur.action](cur.data);
                        }; // else continue
                    break;
                };
            };
        };


            // Dispatch the AJAX request, and save it to the data object so that
            // is can be referenced and cancelled if need be.

            self.data('ajaxify.xhr', jQuery.ajax({
                url: this.action,
                type: 'post',
                dataType: options.dataType,
                data: (beforeSubmitIsJquery ? beforeSubmitResult.serialize()
                                            : self.serialize()),
                success: function (/**/) {
                    cleanup();

                    options.onSuccess.apply(that, arguments);
                },
                error: function (/**/) {
                    cleanup();

                    options.onError.apply(that, arguments);
                },
                complete: function (/**/) {
                    options.onComplete.apply(that, arguments);
                }
            }));
$(文档).ready(函数(){
jQuery.ajaxSetup({
cache:false,
数据类型:“json”,
错误:函数(){
警报(“请求未成功。请稍后重试。”);
}
});
$(文档).ajaxSuccess(函数(e、xhr、设置){
var response=xhr.responseText;
if(settings.dataType!=“json”){
返回;
};
试一试{
response=jQuery.parseJSON(response);
}捕获(e){
警报(e);
返回;
}
if(response.elements数组实例){
风险需求=[“目标”,“行动];
var valid=true;

对于(var i=0;i那么,我之所以这样问,是因为您所描述的行为具有由事件处理程序启动ajax请求并随后发生“本机”浏览器表单提交所导致的双重post的所有特征。如果我是您,我会确保您的事件处理程序返回“false”或调用“preventDefault”,或者两者兼而有之:-)-1小时前的尖刻


我的后续行动:由于IE忽略preventDefault,请尝试使用return false;preventDefault之后

对于其他开发人员的未来参考:公共库通常会使用这两种方法(preventDefault()和returnfalse;)编写一个块,因为这会告诉每个主要浏览器停止处理事件,根据它们侦听的事件。这对于旧版IE浏览器更为重要


无论如何,很高兴我们能提供帮助。

我在ASP.NET MVC 4中遇到了这个问题。我返回了一个JSONResult。但是通过将返回对象更改为this.content,解决了这个问题

[HttpPost]
public ActionResult Upload(AddNewModel model)
{
    /**...*/
    return this.Content(id.ToString());
}

因此,IE在返回json对象时似乎有问题,可以通过返回字符串来解决。

您根本不需要内容类型。是什么触发了ajax请求?事件?我这样问是因为您描述的行为具有事件处理程序启动ajax请求所导致的双重发布的所有特征st之后是“本机”浏览器表单提交。如果我是你,我会确保你的事件处理程序返回“false”或调用“preventDefault”,或者两者都返回:-)作为一个临时实验,你可以尝试向你的表单添加一个
,并将你的处理程序连接到它。一个“按钮”-“键入”按钮不会提交表单,因此如果在您使用该测试按钮执行操作时该按钮起作用,那么您就有证据表明您在当前代码中没有对该事件进行中性化。由于IE忽略preventDefault,请尝试在preventDefault之后使用
return false;
试试@drachensten,然后说声“嗨”如果你能帮忙的话,我的Shreveport遇到了一个问题:基本上我们通过从submit按钮中删除type=“submit”,然后在javascript中将其设置为live(“单击”而不是live(“提交”)(这显然在IE中被破坏了?)哦,伙计,很抱歉,我下班后你抓到我了……我明天早上会考虑这个问题。我以为你把它连接到一个输入提交,一个onclick被取消并返回false。当你把它恢复到那种状态时会发生什么事?~~~~~ Live只在某些浏览器中有效,IIRC。当Live不起作用时,我想到了一个解决办法,b但是我今天早上有点晚了,所以无法查看详细信息。我当然可以在大约2或3个小时内查看,然后做出回应。希望这对目前有所帮助。
[HttpPost]
public ActionResult Upload(AddNewModel model)
{
    /**...*/
    return this.Content(id.ToString());
}