当前位置: 首页 > 知识库问答 >
问题:

如何通过飞行前请求从javascript调用REST Webservice?

暴乐邦
2023-03-14

我试图从javascript本身调用另一个域中的服务。我可以请求跨域服务。但我无法从服务中检索信息。一些我如何被同源政策阻止。请帮我找出代码中的错误。

var requestJsonData;

function crossDomainCall(){  ** It will be called by button click **
    requestJsonData = createCORSRequest('POST', 'IPAddress/servicePath');
    if (requestJsonData){
        requestJsonData.onreadystatechange = handler;
        requestJsonData.send();
    }
    else {
        alert('Cross Domain Call is not invoked');
    }
}

function handler(evtXHR) {
    if(requestJsonData.readyState   ==  4) {
        if(requestJsonData.status   ==  200) {
            var response    =   requestJsonData.responseText;
        }
        else {
            alert(" Invocation Errors Occured " + requestJsonData.readyState + " and the status is " + requestJsonData.status);
        }
    }
    else {
        alert("currently the application is at " + requestJsonData.readyState);
    }
}
function createCORSRequest(method, url){
    var xhr;
        xhr = new XMLHttpRequest();
    if ("withCredentials" in xhr){
        xhr.open(method, url, true);
        xhr.setRequestHeader('X-PINGOTHER', 'pingpong');
    } else if (typeof XDomainRequest != "undefined"){
        xhr = new XDomainRequest();
        xhr.open(method, url);
    } else {
        xhr = null;
    }
    return xhr;
}
@OPTIONS
@Path("/servicePath")
@Produces("*/*")
@Consumes("*/*")
public Response corsRequest() {
    Response response   =   null;
    ResponseBuilder builder =   null;
    builder =   Response.ok();
    builder.header("Access-Control-Allow-Headers", "X-PINGOTHER");
    builder.header("Access-Control-Max-Age","1728000");
    builder.header("Access-Control-Allow-Origin","Origin_Ip_Address");
    builder.header("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
    builder.header("Content-Type","text/plain");
    builder.header("Connection", "Keep-Alive");
    response    =   builder.build();
    System.out.println("Exited from Options method");
    return response;
}

@POST
@Path("/servicePath")
@Produces("application/json")
public String drawRegions() {
    System.out.println("Entered inside Post method");
            // Some calculation to arrive jsonObject.
    return jsonObject;
}

OPTIONS/SolartisGeoCodelookupService/Service/DrawRegions HTTP/1.1

主机:Cross_Domain_IP_Address

用户代理:Mozilla/5.0(x11;Linux x86_64;RV:25.0)Gecko/20100101 Firefox/25.0

起源:Origin_IP_Address

访问-控制-请求-方法:POST

访问控制请求头:x-pingother

服务器:apache-coyote/1.1

Access-Control-Allow-Headers:X-PINGOTHER

连接:保持活力

日期:Thu,2013年12月12日12:39:27格林尼治时间

响应缓存标头

来自缓存的响应标头

主机:crossDomain_IP_Address

用户代理:Mozilla/5.0(x11;Linux x86_64;RV:25.0)Gecko/20100101 Firefox/25.0

接受:text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

接受-语言:恩-美国,en;q=0.5

接受编码:gzip,deflate

缓存控制:无缓存

内容-长度:0

响应标头

共有1个答案

沃盛
2023-03-14

与其在javascript中处理X域调用,不如在应用程序本地开发一个使用其他域中的web服务的服务,然后从javascript调用本地服务。

我还建议您使用jQuery来执行跨域Ajax调用,请参见以下链接:http://www.pureexample.com/jQuery/cross-domain-ajax.html。

没有必要直接处理XHR,因为有jQuery为您处理。

希望这能有所帮助,

问候。

 类似资料:
  • 问题内容: 我开发了一个PhoneGap应用程序,现在将其转换为移动网站。除了一处小故障,一切都可以顺利进行。我通过POST请求使用了某个第三方API,该API在该应用中可以正常运行,但在移动网站版本中却无法运行。 仔细查看后,似乎AngularJS(我想实际上是浏览器)正在首先发送OPTIONS请求。今天,我对CORS有了很多了解,但似乎无法弄清楚如何完全禁用它。我没有访问该API的权限(因此无

  • 我已经使用Spring MVC实现了Web Socket,它对我来说运行良好,即从一个浏览器工作到另一个浏览器,该浏览器使用此代码为那些套接字打开。 有人能帮我从普通的api控制器中给谁打电话@SendTo(“/主题/问候”)吗?我试过用这个,但对我不起作用。 对此有什么想法吗? 谢谢

  • 我已经找了5个小时左右,但我放弃了。我的ajax get请求不起作用。 它连接到标准的C#mvc api,但我得到的只是这个错误: 无法加载XMLHttpRequesthttp://localhost:18428/api/Reservation/1?weekNumber=1. 对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许来源”标头。起源'http://localhost因

  • 问题内容: 如何通过JavaScript发送跨域POST请求? 注意-它不应该刷新页面,之后我需要抓取并解析响应。 问题答案: 如果你控制要发布的服务器,只需在服务器上设置响应头即可利用“跨域资源共享标准”。此答案在该主题的其他答案中进行了讨论,但我认为不是很清楚。 简而言之,这里是如何完成从from.com/1.html到to.com/postHere.php的跨域POST(以PHP为例)。注意

  • 从浏览器到我的自助主机OWIN WebAPI的所有预飞行请求都不会被中间件处理。如果我从邮递员提出选项请求,它们将被处理。为什么是这样的行为? 请求URL:http://localhost:9000/api/v1/conversations/create?connectionId=13509f44-eacb-4950-8cc8-71bd37098975 请求方法:选项 状态代码:401未经授权的远

  • 我的应用程序是一个非WebSpring启动应用程序,使用WebClient进行内部get调用。 每次我启动它时,它都会返回我。 问题与webclient调用有关:当我执行block()时,一切正常。当我试图让它保持被动时,它抛出一个异常。 以下是我的主要方法: 这是我的网络客户电话: 以下是异常跟踪: