2013-04-25 62 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