易趣API响应错误:资源被解释为脚本,但使用MIME类型text / xml进行传输

时间:2015-01-06 22:48:15

标签: javascript ebay

我是eBay API的新手,一直在创建url字符串并将其附加到JS创建的'script'标记,只是调用 findItem / findItemAdvanced 所以远远没有接收和处理响应的问题。

问题是我在错误后尝试了 getSingleItem 请求和wada-ya-know错误。

第一次尝试:

<script>
  url='htt'+'p://open.api.ebay.com/shopping?'
          +'callname=GetSingleItem'
    +'&'+'responseencoding=XML'
    +'&'+'appid=********-2a4d-4b23-8d37-defc1bbb868f'
    +'&'+'siteid=0'
    +'&'+'version=515'
    +'&'+'ItemID=191467818411'
    +'&'+'callback=funCB'
  /******************************/
  elm=document.createElement('script')
  elm.src=url
  document.body.appendChild(elm)
</script>

除了网址和网址之外,查找调用的方法完全相同。 REST-PAYLOAD:

  url='htt'+'p://svcs.ebay.com/services/search/FindingService/v1'
    +'?OPERATION-NAME=findItemsAdvanced'
    +'&SERVICE-VERSION=1.0.0'
    +'&SECURITY-APPNAME=********-2a4d-4b23-8d37-defc1bbb868f'
    +'&GLOBAL-ID=EBAY-GB'
    +'&RESPONSE-DATA-FORMAT=XML'
    +'&REST-PAYLOAD=true'

所以我问自己为什么,继续寻找,找出几种不同的方法来打电话&amp;最后决定jQuery $ .ajax()GET / POST方法最适合我的有限编码功能。

经过多次练习后,我想出了一个适用于发现而不是该死的 getItem 网址的电话。

$(document).ready(function(){
  /******************************
  url='htt'+'p://svcs.ebay.com/services/search/FindingService/v1'
    +'?OPERATION-NAME=findItemsAdvanced'
    +'&SERVICE-VERSION=1.0.0'
    +'&SECURITY-APPNAME=********-2a4d-4b23-8d37-defc1bbb868f'
    +'&GLOBAL-ID=EBAY-GB'
    +'&RESPONSE-DATA-FORMAT=XML'
    +'&REST-PAYLOAD=true'
    +'&paginationInput.entriesPerPage=3'
    +'&keywords=charizard'
  /******************************/
  url='htt'+'p://open.api.ebay.com/shopping?'
    +'callname=GetSingleItem'
    +'&'+'responseencoding=XML'
    +'&'+'appid=********-2a4d-4b23-8d37-defc1bbb868f'
    +'&'+'siteid=0'
    +'&'+'version=515'
    +'&'+'ItemID=191467818411'
    +'&'+'IncludeSelector=Description'
  /************************************/
  var id;
  $.ajax({
    type: 'GET',
    url: url,
    dataType: 'jsonp',
    jsonp: 'callbackname',
    success: function(xml,status,request){ console.log(xml); },
    error: function(request,status,error){ alert('Status: '+status+'\n\nError: '+error); },
    complete: function(request,status){ alert('Finished & '+status); }
  });
});

我已经不得不通过xml / jsonp屏障来解决这个问题了,现在出现了这个错误:

  

资源解释为脚本,但使用MIME类型text / xml

进行传输

无论我试图试探什么,都会突然出现。

1 个答案:

答案 0 :(得分:1)

你的代码说:

responseencoding=XML

RESPONSE-DATA-FORMAT=XML

XML不是JSONP。

要将响应作为JSONP处理,服务器必须将响应格式化为JSONP。

eBay的API可能支持也可能不支持JSONP,但如果支持,则必须要求而不是XML。