小编典典

跨域AJAX请求不起作用

ajax

我正在通过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


阅读 321

收藏
2020-07-26

共1个答案

小编典典

我想出的解决方案是使用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)
2020-07-26