zoukankan      html  css  js  c++  java
  • node.js 跨域问题 No 'Access-Control-Allow-Origin' header

    今天在使用$.ajax对服务器上的node.js的http服务进行访问时,IE正常,chrome浏览器报了这个错误:XMLHttpRequest cannot load http://10.168.1.123:8816/addMeter. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. 并且没有返回值。

    解决方法是将 response.writeHead(200, { "Content-Type":"text/html"});  

    改为 response.writeHead(200, { "Content-Type":"text/html" , "Access-Control-Allow-Origin":"*"});

    response.writeHead(200, { "Content-Type":"text/html" , "Access-Control-Allow-Origin":"*" , "Access-Control-Allow-Headers":"X-Requested-With"});也对,不过暂时不知道后面的 "Access-Control-Allow-Headers":"X-Requested-With" 是什么意思

    本机是:10.168.1.156

    最开始前端发送请求时的代码是:

    $.ajax({
              url: "http://10.168.1.123:8816/addMeter",
              data:addMeter,
              type: "POST",
              dataType:'string',
              success:function(data) {
                    $("p").text(data);
                    init();
                },
              error:function(XMLHttpReq, textStatus, error){
                    alert(XMLHttpReq);
                    alert(textStatus);
                    alert(error);
                }
            });

    其中在IE下textStatus报错为"parsererror",error报错为"no conversion from text to string",chrome下textStatus报错为"error",error错误为空。(可见巨硬良心).

    后来查了一下,发现原来是dataType错误,不接受值"string",改为"text"就对了。

    stackoverflow链接:http://stackoverflow.com/questions/16288903/no-conversion-from-text-to-string-ajax-call-fails

    回答下面的讨论还提到:如果不加dataType也是可以的,除非对于返回数据的格式有确定的要求(比如需要json或者xml格式的数据)。

    另:w3cschool中的解释:http://www.w3school.com.cn/jquery/ajax_ajax.asp

    dataType
    
    类型:String
    
    预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 XML MIME 类型就被识别为 XML。在 1.4 中,JSON 就会生成一个 JavaScript 对象,而 script 则会执行这个脚本。随后服务器端返回的数据会根据这个值解析后,传递给回调函数。可用值:
    
    "xml": 返回 XML 文档,可用 jQuery 处理。
    "html": 返回纯文本 HTML 信息;包含的 script 标签会在插入 dom 时执行。
    "script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了 "cache" 参数。注意:在远程请求时(不在同一个域下),所有 POST 请求都将转为 GET 请求。(因为将使用 DOM 的 script标签来加载)
    "json": 返回 JSON 数据 。
    "jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
    "text": 返回纯文本字符串
  • 相关阅读:
    hdu 1849 (尼姆博弈)
    Spring中Quartz的配置
    DevExpress后置代码中初始化SQL数据源的方法
    MySQL 存储过程例子,不能在if else里面用begin end否则会报错Error Code : 1064!
    javascript实现的可改变滚动方向的无缝滚动
    Android本地视频播放器开发--视频解码
    uva 10196 Check The Check
    Oracle PL/SQL 非预定义异常、自定义异常处理、RAISE_APPLICATION_ERROR
    Hibernate获取Connection
    SQL查询数据封装JavaBean对象
  • 原文地址:https://www.cnblogs.com/lswit/p/4994887.html
Copyright © 2011-2022 走看看