使用jquery ajax调用MapQuest Geocode api

时间:2012-09-25 16:39:34

标签: jquery ajax mapquest

我正在尝试使用jquery ajax()来调用mapquest api并且我一直收到以下错误:

Statuscode:400

"Illegal argument from request: Error parsing JSON from Request: A JSONObject text must begin with '{' at character 0 of , see http://www.mapquestapi.com/geocoding/ for details on correctly formatting locations."

这是我正在制作的jquery ajax调用:

$.ajax({
    url: "http://www.mapquestapi.com/geocoding/v1/address?key=<mykey>",
    dataType: 'json',
    type: 'POST',
    contentType:'json',
    data: {json: {location: { "postalCode": "98765"}, options: { thumbMaps: false} } },
    success: function(data) { log( data ) },
    error: function(data) { log( 'error occurred - ' + zipCode + ' - ' + data ) }
});

我也试过jsonp作为dataType,我无法使用任何东西。

网址方法工作正常,但捕获返回响应更加困难:

http://www.mapquestapi.com/geocoding/v1/address?key=<mykey>&location=89790

任何帮助都将不胜感激。

马特

2 个答案:

答案 0 :(得分:1)

在传递位置信息时,您可能会有一组额外的括号。

试试这个:

    $.ajax({
    url: "http://www.mapquestapi.com/geocoding/v1/address?key=",
    dataType: 'json',
    type: 'POST',
    contentType:'json',
    data: {location: { "postalCode": "98765"}, options: { thumbMaps: false} },
    success: function(data) { log( data ) },
    error: function(data) { log( 'error occurred - ' + zipCode + ' - ' + data ) }
});

答案 1 :(得分:0)

这真的是因为你的json并不是真正的json字符串。你不能只是像这样将JSONObject传递给url。你必须先将其字符串化。我遇到了和你一样的错误,在我将其字符串化之后,它就起作用了。它在IE7中不起作用,所以你必须使用JSON2使它与ie7兼容:在这里找到:json2

var key = <mykey>;
$.ajax({
    url: "http://www.mapquestapi.com/geocoding/v1/address",
    dataType: 'json',
    type: 'POST',
    contentType:'json',
    data: {
        key: decodeURIComponent(key),
        json : JSON.stringify( 
            {
                location: { "postalCode": "98765"}, options: { thumbMaps: false}
            }) 
    },
    success: function(data) { log( data ) },
    error: function(data) { log( 'error occurred - ' + zipCode + ' - ' + data ) }
});