Ajax请求返回JSON但抛出错误

时间:2017-02-01 09:02:07

标签: jquery json ajax google-maps-api-3 coffeescript

首先:我搜索了我的错误并找到了一些有用的提示,但他们并没有解决我的错误。在大多数问题中,问题是无效的json响应。

我通过coffeescript向Google Maps Service提出Ajax请求:

console.log 'widget ready - make request'
distrequest = $.ajax 'https://maps.googleapis.com/maps/api/distancematrix/json',
    type: 'GET'
    data:
      origins: 'London',
      destinations: 'Berlin',
      language: 'de-DE',
      key: 'ACTUALGOOGLEKEY'
    #dataType: 'json' #tried to comment this out - same error
    error: (jqXHR, textStatus, errorThrown) ->
        console.log "Ajax error " + textStatus + " " + errorThrown
    success: (data, textStatus, jqXHR) ->
        console.log "success"
        console.log data

当我检查我的控制台输出时,我看到widget ready - make request已打印,然后:Ajax error error

当我通过firefox开发者工具检查我的网络时,我看到以下内容:

Method: GET
Status: 200
File: json?origins=...
Type: json
Response: {
"destination_addresses" : [ "London" ],
"origin_addresses" : [ "Berlin" ],
"rows" : [
   {
      "elements" : [
         {
            "distance" : {
               "text" : "24,7 km",
               "value" : 24732
            },
            "duration" : {
               "text" : "19 Minuten",
               "value" : 1146
            },
            "status" : "OK"
         }
      ]
   }
],
"status" : "OK"
}

首先 - 我假设google api的json形式良好。我无法看到任何错误,我没有得到解析错误,我的网络控制台firefox识别出json类型并向我显示(在我看来)一个有效的json对象。 不知怎的,Ajax错误事件被解雇了 - 但我不知道为什么,而且errorThrown根本没用。

很抱歉,如果这是重复的 - 任何想法? (我实际上更改了Origin和Destination以及关于隐私的Google API Key。返回的值是我的请求的正确信息 - 谷歌地图不会认为你可以在19分钟内从伦敦到柏林)

编辑:dataType:' text'不工作错误方法

中的jqXHR.responseText为空

edit2:我将以下代码添加到我的错误函数中:

        console.debug(jqXHR.responseText)
        console.log "Response Headers "+jqXHR.getAllResponseHeaders() 
        console.log "Status "+jqXHR.status
        console.log "Status Text "+jqXHR.statusText

它给了我一个statusText error,一个空的Header和responseText以及一个状态代码0

关于这个答案https://stackoverflow.com/a/14507670/5119359,它可能与CORS有关吗? 但是我会获得JSON对象而不是我的网络firefox开发人员控制台吗?

1 个答案:

答案 0 :(得分:0)

从其他来源发送请求我收到回复:$("option[name = '" + name + "']").attr('selected','selected');

我认为这取决于您执行Ajax请求的上下文。 浏览器默认禁用CORS以防止任何数据窥探。我想这是在Firefox开发中启用的,因此请求成功完成。

我不确定您运行上述代码的上下文。如果它在Node中执行的设置与我相同,那么添加设置Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.就足够了。

$.support.cors = true