2013-04-25 80 views
0
$.ajax({ 
       type: "GET", 
       url: "http://api.zip-tax.com/request/v20",      
       data: { 
        key: '1234567890', 
        postalcode: '90265', 
        format: 'json' 
       }, 
       success: function (json) { 
        debugger; 
        // do stuff with json (in this case an array) 
        alert("Success"); 
       }, 
       error: function (a, b, c) { 
        debugger; 
        alert("Error"); 
       } 
      }); 

当我上面的代码运行时,它抛出我的错误块,并说跨域获取Ajax请求抛出分析错误

SyntaxError: invalid label 
[Break On This Error] 

{"version":"v20","rCode":100,"results":[{"geoPostalCode":"902 

虽然它也表明readyState=4, status=200, statusText="success"parsererror 如果我打的网址,我可以看到正确的json

URL: `http://api.zip-tax.com/request/v20?key=1234567890&postalcode=90265&format=json` 
Result: `{"version":"v20","rCode":100,"results":[{"geoPostalCode":"90265","geoCity":"MALIBU","geoCounty":"LOS ANGELES","geoState":"CA","taxSales":0.090000003576279,"taxUse":0.090000003576279,"txbService":"N","txbFreight":"N","stateSalesTax":0.064999997615814,"stateUseTax":0.064999997615814,"citySalesTax":0,"cityUseTax":0,"cityTaxCode":"","countySalesTax":0.0099999997764826,"countyUseTax":0.0099999997764826,"countyTaxCode":"19","districtSalesTax":0.014999999664724,"districtUseTax":0.014999999664724},{"geoPostalCode":"90265","geoCity":"PT DUME","geoCounty":"LOS ANGELES","geoState":"CA","taxSales":0.090000003576279,"taxUse":0.090000003576279,"txbService":"N","txbFreight":"N","stateSalesTax":0.064999997615814,"stateUseTax":0.064999997615814,"citySalesTax":0,"cityUseTax":0,"cityTaxCode":"","countySalesTax":0.0099999997764826,"countyUseTax":0.0099999997764826,"countyTaxCode":"19","districtSalesTax":0.014999999664724,"districtUseTax":0.014999999664724},{"geoPostalCode":"90265","geoCity":"TWAIN HARTE","geoCounty":"VENTURA","geoState":"CA","taxSales":0.075000002980232,"taxUse":0.075000002980232,"txbService":"N","txbFreight":"N","stateSalesTax":0.064999997615814,"stateUseTax":0.064999997615814,"citySalesTax":0,"cityUseTax":0,"cityTaxCode":"","countySalesTax":0.0099999997764826,"countyUseTax":0.0099999997764826,"countyTaxCode":"56","districtSalesTax":0,"districtUseTax":0}]}` 

请指教。我不'想写一个服务器端脚本。

+1

该内容不是JSONP。这是常规的JSON。 – 2013-04-25 06:57:52

+0

okie,如何拨打正确的电话?我尝试没有jsonp也没有工作。 – 2013-04-25 07:02:23

回答

2

这不是JSONP的工作方式。

使用适当的JSONP,将<script>元素放置在页面上,并将src设置为您请求的URL。这由jQuery内部处理。

JSONP的响应是而不是 JSON。它是JavaScript,调用一个函数,并将JSON作为参数传递。这就是允许跨域数据传输的原因,因为您只需要使用Javascript代码。

发出请求时,您必须提供与JSON响应时调用的函数的名称,通常是这样的:

http://www.website.com/request/jsonp?param=value&param2=value2&callback=callbackFunc 

因此,他们的回应是,格式为:

callbackFunc({JSON stuff}); 

jQuery在内部处理此回调内容,因此success方法最终被调用。

它看起来不像API支持JSONP(http://www.zip-tax.com/documentation),所以你必须对自己的服务器进行AJAX调用,让该服务器发出你需要的请求(它返回JSON),然后返回JSON在AJAX响应中。

+0

我无法直接向其服务器发出ajax请求并在任何情况下获得结果吗? – 2013-04-25 07:09:47

+0

@JitendraPancholi不幸的是,因为它违反了同源策略 - https://developer.mozilla.org/en-US/docs/JavaScript/Same_origin_policy_for_JavaScript。你可以看看CORS - https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS – Ian 2013-04-25 07:32:20