3

这是适用于 Safari 的 AJAX 方法,但不适用于 Chrome。错误信息如下。

$(document).ready(function(){
  $('.infobutton').click(function(){
    $.ajax({
      url: 'http://apps.nlm.nih.gov/medlineplus/services/mpconnect_service.cfm',
      data: {
        'mainSearchCriteria.v.cs': $(this).attr('data-code-system'),
        'mainSearchCriteria.v.c':  $(this).attr('data-code')
      },
      dataType: 'xml',
      async: false,
      method: 'GET',
      success: function(data){
        console.log('success');
        console.log(data);
      },
      done: function(data){
        console.log('done');
        console.log(data);
      },
      error: function(data){
        console.log('error');
        console.log(data.error());
      }
    });
  });
});

控制台输出statusTexterror回调中给出如下:"Error: NetworkError: DOM Exception 19"此链接讨论 DOM Exception 19,但只是说NETWORK ERROR. 没有帮助。

我从其他研究中了解到 Chrome 存在安全、XSS 等问题。

我已经尝试了这个SO 帖子中的每一个建议,以及这个。没运气。

使用该查询字符串直接访问 URL 是可行的。你可以在这里查看

另请注意,这不是应用程序的一部分。html 从字面上看就是<button class="infobutton">Click Me</button>. 这只是让 AJAX 工作的概念证明。

更新 我还可以确认我在本地(使用file:///协议)和远程在开发服务器上工作时都遇到了同样的错误。

4

2 回答 2

1

您需要crossDomain: true在您的域上设置并设置 Location 重定向以指向 nih.gov URL。

绕过限制的一种方法是在策略允许的域上启动请求。换句话说,它必须与发出请求的 JavaScript 在同一个域中。然后,您的页面可以将请求重定向到另一个域。

本地页面示例

<?php
// http://yourdomain.com/some/url/redirect.php
header("Location: http://apps.nlm.nih.gov/medlineplus/services/mpconnect_service.cfm");
?>

然后,将 JavaScript 中的 URL 替换为http://yourdomain.com/some/url/redirect.php. 效果是规避了您遇到的问题。

于 2013-07-10T20:37:27.383 回答
0
  1. In your error handling use console.log(data.status)
  2. Check your request URL - it returns 404 (not found)

Did you try Fiddler2 -great tool for debugging

于 2013-07-11T00:27:43.413 回答