当前位置: 首页 > 面试题库 >

跨域AJAX请求不起作用

佴飞驰
2023-03-14
问题内容

我正在通过jQuery的$ .ajax函数使用的第三方API上调用POST。但是,当我拨打电话时,出现以下错误:XMLHttpRequest cannot load http://the-url.com. The request was redirected to 'http://the- url.com/anotherlocation', which is disallowed for cross-origin requests that require preflight.

我从这篇文章中看到这可能是Webkit的错误,所以我在Firefox中尝试了此操作(我正在使用Chrome开发),并且得到了相同的结果。

在这篇文章中,我还尝试通过将crossDomain$.ajax函数的属性true设置为并将设置为dataType来使用jsonpjsonp。但是,这导致了500个内部服务器错误。

当我使用–disable-web-security标志启动Chrome时,我没有任何问题。但是,如果我正常启动浏览器,则会收到错误消息。

因此,我想这可能是一个分为两部分的问题。我该怎么做才能提出此跨域请求?如果答案是JSONP,那么我该如何确定是否正确设置了第三方API来支持此功能?

编辑:
这是我在禁用浏览器安全性的情况下拨打电话时的屏幕截图:https
:
//drive.google.com/file/d/0Bzo7loNBQcmjUjk5YWNWLXM2SVE/edit?usp=sharing

在启用了浏览器安全性的情况下拨打电话时,这是屏幕托管程序(如正常):https
://drive.google.com/file/d/0Bzo7loNBQcmjam5NQ3BKWUluRE0/edit?usp=sharing


问题答案:

我想出的解决方案是使用cURL(如@waki所提到的),但是使用了稍作修改的版本来支持SOAP。然后,我对本地PHP文件进行了调用,而不是对第三方API(配置不正确)进行AJAX调用,然后对本地API文件进行了SOAP调用,并将数据传递回我的PHP文件中,然后处理它。这使我忘记了CORS及其相关的所有复杂性。这是代码(从该问题中获取和修改的,但未进行身份验证)。

$post_data = "Some xml here";
$soapUrl = "http://yoursite.com/soap.asmx"; // asmx URL of WSDL


$headers = array(
    "Content-type: text/xml;charset=\"utf-8\"",
    "Accept: text/xml",
    "Cache-Control: no-cache",
    "Pragma: no-cache",
    "SOAPAction: http://yoursite.com/SOAPAction",
    "Content-length: " . strlen($post_data),
); //SOAPAction: your op URL

$url = $soapUrl;

// PHP cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); // the SOAP request
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$response = curl_exec($ch);

/* Check for an error when processing the request. */
if(curl_errno($ch) != 0) {
   // TODO handle the error
}

curl_close($ch);

// TODO Parse and process the $response variable (returned as XML)


 类似资料:
  • 问题内容: 我正在使用此页面 -http : //ecmazing.com/cors.html-向此资源发出跨域Ajax请求: http //hacheck.tel.fer.hr/xml.pl 它适用于Chrome,Safari和Firefox,但不适用于IE9和Opera。 代码: (预期结果是XML代码字符串。) 自己看看: http : //ecmazing.com/cors.html 在I

  • 问题内容: 跨域AJAX POST请求在Web浏览器(包括手机上的浏览器)上可以很好地工作,但不适用于使用以下工具构建的本机应用程序 我创建了一个登录表单,用户必须输入他们的登录凭据,然后由heroku上托管的服务器对其进行验证,如果输入了有效的凭据,则返回json 。 我的Ajax脚本: 解决此问题所采取的步骤: 域白名单 -config.xml 告诉jQuery允许跨域 要么 禁用缓存 任何帮

  • 问题内容: 在我的项目中,我需要允许其他人向我的脚本发送ajax请求。因此,外部请求可能来自其他网站和域,也可能来自浏览器扩展。 我在脚本顶部仅添加了以下两行,以使它们能够做到: 现在我的问题是:这里是否遗漏了任何安全方面的考虑?这个简单的解决方案会带来严重的问题吗? 如果是这样,什么是更好的解决方案? 感谢您的回复。 问题答案: 如上所述,任何人都可以随时向您的页面发送请求:因此,您需要考虑的主

  • 问题内容: 如何使用XDomainRequest正确重写Ajax请求以使其在IE 8 +中工作? 问题答案: 将此插件用于IE8-9 Xdomain支持。 https://github.com/MoonScript/jQuery-ajaxTransport- XDomainRequest

  • 问题内容: curl -v -X POST -H “Authorization: Basic ” -k -d “grant_type=password&username= &password= ” -H “Content-Type:application/x-www-form-urlencoded” https://localhost:9443/oauth2/token (来自 https://d

  • 在我的项目中,我需要允许其他人向我的脚本发送ajax请求。因此,外部请求可能来自其他网站和域,也可能来自浏览器扩展<我只是在我的脚本顶部添加了这两行,让他们完成这项任务: 现在我的问题是:这里有我错过的任何安全考虑吗?这个简单的解决方案会产生严重的问题吗? 如果是,更好的解决方案是什么? 感谢您的回复。