【问题标题】:Why my jQuery ajax call is not successful为什么我的 jQuery ajax 调用不成功
【发布时间】:2013-02-09 17:02:04
【问题描述】:

我正在开发我的 web 应用程序并在 localhost:8080 上运行它,在我的 js 文件中,我有一个 ajax 调用来从服务器获取 xml 数据:

$.ajax({
        url: 'http://COMPANY_DOMAIN.com/company-interface/the-id',
        type: 'GET',
        async: false,
        dataType: 'application/xml',
        data: {id: 43},
        success: function(data) {

            alert(data);

        },
        error: function(xhr, status, error){
            alert('error happens');
        }
     })

我可以访问 URL http://COMPANY_DOMAIN.com/company-interface/the-id/?id=43,它将在浏览器上显示 xml 结果,但我上面的 ajax 调用总是转到错误函数。

我检查了 firebug,“xml”选项卡显示“XML 解析错误:找不到元素位置:moz-nullprincipal:{9fd0dca8-cf07-4401-b1de-ab04e8aa00bc} 第 1 行,第 1 列:" 并且 firebug 显示 URL GET 是 http://COMPANY_DOMAIN.com/company-interface/the-id/?id=43& =1302610001570

为什么 firebug GET 显示“...& =1302610001570”?这是什么意思?为什么我的 ajax 调用失败了,虽然我可以访问那个 URL?

----编辑---------------

您好,我改为使用 localhost 请求,例如:

$.ajax({
            url: 'http://localhost:8080/company-interface/the-id',
            type: 'GET',
            async: false,
            dataType: 'xml',
            data: {id: 43},
            success: function(data) {

                alert(data);

            },
            error: function(xhr, status, error){
                alert('error happens');
            }
         })

但我遇到了同样的错误...请提供更多建议...谢谢。

【问题讨论】:

  • 额外的参数防止被查询页面的缓存。如果这不起作用,可能是由于跨域安全问题

标签: javascript ajax jquery


【解决方案1】:

这可能是由于跨域访问控制。您正在访问您计算机上的站点,该站点尝试连接到另一个网站。除非您定义 Access-Control-Allow-Origin 标头,否则这是不允许的。

正如@Craig 所说,xml 的内容类型需要更改。

【讨论】:

  • 如何定义 Access-Control-Allow-Origin 标头?我正在开发一个纯 javascript 项目,以一个 index.html 文件为起点。在哪个文件中以及如何定义 Access-Control-Allow-Origin 标头??
  • 这需要你的服务器设置。见en.wikipedia.org/wiki/Same_origin_policy
  • 同时在 SO 中搜索 Access-Control-Allow-Origin
【解决方案2】:

Javascript 受same origin policy 约束。您在 localhost 上运行的脚本无法访问 COMPANY_DOMAIN.com。

【讨论】:

    【解决方案3】:

    试试下面的代码:

     $.ajax({
                url: 'http://localhost:8080/company-interface/the-id',
                type: 'GET',
                async: false,
                dataType: 'text',
                data: {id: 43},
                success: function(data) {
    
                // Assume response like..
                // <note>
                //    <from>Jani</from>
                //    <to>Tove</to>
                //    <message>Remember me this weekend</message>
                //  </note>
    
                xmlDoc = $.parseXML( data ),
                $xml = $( xmlDoc ),
                $message = $xml.find("message")
                alert($message.text());
                $("#xmlResonse").html($message.text());
    
            },
            error: function(xhr, status, error){
                alert('error happens');
            }
         })
    

    【讨论】:

      【解决方案4】:

      1302610001570 用于测量响应,

      您是否检查过响应是否创建了有效的 xml?

      【讨论】:

      • 不,正如我提到的,有一个 XML 解析错误消息
      • 测量响应是什么意思?我在哪里可以买到?
      • 我的意思是这个是用来让你看看请求从发送请求到获取数据变化了多长时间
      【解决方案5】:

      将您的数据类型更改为application/xmltext/xml

      正如其他评论所暗示的,您的 URL 是否在另一个域上?如果没有,请尝试使用相对 URL。

      【讨论】:

      • 我改变了,但它没有改变任何东西......:(
      猜你喜欢
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      相关资源
      最近更新 更多