【问题标题】:ajax fails on IE 10 when using json使用 json 时,ajax 在 IE 10 上失败
【发布时间】:2014-01-09 14:41:19
【问题描述】:

我正在使用 ajax 调用休息服务。

这一切在 Chrome 上运行良好,但从 IE 10 运行时,ajax 调用失败。

我尝试打印错误消息,但没有得到启发,只是说“未定义”。

ajax 请求永远不会发送到服务器。 我看到帖子谈论 IE 与 json 的问题,但还没有找到正确的解决方案。

更多信息(不知道是否相关):如果我尝试通过 IE 10 访问服务 url(将 url 放入浏览器中),则不会显示 JSON。而是询问我是否要打开一个文件。

另外:请求是从 html 文件完成的。 (与服务不在同一域下)。

有什么想法吗?

谢谢。

   var JSONObject= {
            "login":LogInUserName,
            "password": LogInPassword,
            };


    $.ajax({  
        url:'https .... ',  
        type:'post',
        data :  JSONObject,      
        dataType: 'JSON',
        success: function(data) { 
            if(data.hasOwnProperty('errors'))
                {
                    alert("errors found");
                    alert(data.errors);
                }
            else
                {
                    alert("data sent!");

                }


            }  ,
        error: function (request, status, error)  {
            alert ("error before sending");
            alert(request.responseText);
            location.reload();

        }


    });  

【问题讨论】:

  • 尝试在此处删除多余的逗号:"password": LogInPassword, 在 IE10 上应该不再是问题,但谁知道呢?!
  • 你试过用IE10的调试器吗?按 F12 打开,单击 Scripts 选项卡,然后单击 Start Debugging - 您可以设置断点并查看特定时间的变量。编辑:另外,Wolff 是对的——虽然其他浏览器通常可以处理那些额外的逗号,但对我来说,这已经把 IE 搞砸了很多次。
  • 您可以尝试将 cache: false 添加到 ajax 调用中,不知道 IE10 是否如此,但 IE8 有尝试缓存 ajax 调用的习惯,这将导致基本上返回 no数据
  • 错误回调中的“error”参数表示什么?
  • 在这种情况下,听起来您确实是在跨域发布到安全站点,在这种情况下,任何浏览器都不应允许(默认情况下)。这是为了保护网站免受未经授权的使用。您将需要开始阅读(大量)有关跨域解决方案的帖子,但通常最好的解决方案是从您的网络服务器访问该服务,并将其提供给来自同一域的客户端。

标签: javascript jquery ajax json internet-explorer


【解决方案1】:

您需要做的第一件事是学会正确调试并成为F12、控制台选项卡和网络选项卡的好朋友:

本教程展示的是 Google Chrome,但完全相同的想法适用于 IE 或 FireFox

1 - 使用 console.log() 代替 alert()

var JSONObject = {
    "login": LogInUserName,
    "password": LogInPassword // get rid of the comma, stop being lazy
};


$.ajax({
    url: 'https .... ',
    type: 'post',
    data: JSONObject,
    dataType: 'JSON',
    success: function (data) {

        // hit F12 and check the console
        console.log(data); // F off alert()!

    },
    error: function (request, status, error) {

        console.log(request); // F off alert()!
        console.log(status); // F off alert()!
        console.log(error); // F off alert()!

        // don't reload, we have an issue
        // location.reload();

    }


});

2 - 使用 F12 获得舒适

http://www.degraeve.com/reference/simple-ajax-example.php

  • 按 F12
  • 转到网络选项卡
  • 在网站上输入内容并点击开始
  • 单击该野兽并检查“响应”或“预览”选项卡中的错误

【讨论】:

  • 这不是答案。更通用的一组有用的东西可以尝试。最好作为评论。
  • @TrueBlueAussie 太好了,我如何插入带有 mini-markdown 的图像?
  • 你不能插入图片,虽然你可以用文字解释,但是这样的教程属于博客(你可以链接到)。只是说,这不是答案,而是评论(非常大的评论):)
  • 大声笑,我知道,我没有博客,但也许我可以把它变成 StackOverflow WIKI 或其他东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多