【问题标题】:Cross domain get ajax request is throwing parsing error [duplicate]跨域获取 ajax 请求引发解析错误 [重复]
【发布时间】:2013-04-18 23:07:22
【问题描述】:
$.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");
                }
            });

当我运行上面的代码时,它把我扔进错误块并说

SyntaxError: invalid label
[Break On This Error]   

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

虽然它也显示readyState=4, status=200, statusText="success"parsererror 如果我点击那个 url,我可以看到正确的 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}]}`

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

【问题讨论】:

  • 该内容不是 JSONP。它是常规的 JSON。
  • okie,如何正确拨打电话?我也试过没有 jsonp 但没有用。

标签: javascript jquery cross-domain


【解决方案1】:

这不是 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),然后返回AJAX 响应中的 JSON。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-07-18
  • 2017-06-17
  • 2016-09-12
  • 1970-01-01
  • 2015-06-08
  • 2018-04-12
  • 2013-09-14
  • 2015-05-05
相关资源
最近更新 更多