AJAX调用错误-状态码为400(错误请求)

3

我正在尝试使用BloomAPI通过查询医生的名字来检索其NPI编号。我正在使用Jquery Ajax进行GET请求以获取JSON数据。

当我在终端中使用CURL时,我能够获得JSON数据:curl -X GET 'http://www.bloomapi.com/api/search?offset=0&key1=last_name&op1=eq&value1=LIN&key2=first_name&op2=eq&value2=JOHN'

为了下面的目的-我只是将参数硬编码到URL中。但是,我收到“Failed to load resource: the server responded with a status of 400 (Bad Request”错误。您有什么想法我可能做错了什么?

$.ajax({
    type: 'GET',
    url: 'http://www.bloomapi.com/api/search?offset=0&key1=last_name&op1=eq&value1=LIN&key2=first_name&op2=eq&value2=JOHN',
   dataType: 'jsonp'
  }).done(function(server_data) {
    console.log(server_data)
  }).fail(console.log("failed"));

1
可能服务器不支持JSONP。 - Musa
Brian的答案看起来对我来说是正确的。 我已经在https://github.com/untoldone/bloomapi/issues/70上打开了一个错误以考虑改进此行为。 - Michael Wasser
1个回答

6
这是一个比较奇怪的问题...你的代码基本上正确,但是似乎bloomapi不支持像jquery那样禁用缓存。
当你进行这个jquery调用时,实际的url变成了这样:
http://www.bloomapi.com/api/search?offset=0&key1=last_name&op1=eq&value1=LIN&key2=first_name&op2=eq&value2=JOHN&callback=jQuery111207365460020955652_1428455335256&_=1428455335257

回调函数是一个jsonp结构,其中下划线是打破缓存的一种方法。但是,bloomapi似乎不喜欢这样做:
jQuery111207365460020955652_1428455335256({"name":"ParameterError","message":"_ are unknown parameters","parameters":{"_":"is an unknown parameter"}});

为了解决这个问题,您可以像这样禁用缓存破坏:

禁用缓存破坏的方法如下:

$.ajax({
    type: 'GET',
    url: 'http://www.bloomapi.com/api/search?offset=0&key1=last_name&op1=eq&value1=LIN&key2=first_name&op2=eq&value2=JOHN',
    dataType: 'jsonp',
    cache: true
}).done(function(server_data) {
    console.log(server_data)
}).fail(function() { console.log("failed") });

如果这是一个问题,你需要小心地处理缓存破坏。API提供者可能会提供如何解决此问题的反馈。

将来,你可以使用Web调试器轻松检查收到的错误或发送的内容;我使用Fiddler找出了问题所在。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接