JavaScript没有按预期调用下一个函数

时间:2014-07-03 14:14:01

标签: javascript

这让我陷入困境......我正在调用一个外部网址(实际上有2个调用一个数据的id,下一个调用是详细信息,我要捕获的是lat& long from第二个电话)将标记放在地图上

以下是从我页面的onload元素中的body事件调用的代码

var firstpass = true;

function getResults(zip) {
        var zipi = parseInt(zip);
        // or
        // function getResults(lat, lng) {
        $.ajax({
            type: "GET",
            contentType: "application/json; charset=utf-8",
            // submit a get request to the restful service zipSearch or locSearch.
            url: "http://search.ams.usda.gov/farmersmarkets/v1/data.svc/zipSearch?zip=" + zipi,
            // or
            // url: "http://search.ams.usda.gov/farmersmarkets/v1/data.svc/locSearch?lat=" + lat + "&lng=" + lng,
            dataType: 'jsonp',
            jsonpCallback: 'searchResultsHandler'
        });
    }
    //iterate through the JSON result object.

function searchResultsHandler(searchResults) {
    for (var key in searchResults) {
        var results = searchResults[key];
        for (var i = 0; i < results.length; i++) {
            var result = results[i];
            for (var key in result) {
                getDetails(result['id']);
            }
        }
    }
}

function getDetails(id) {
    $.ajax({
        type: "GET",
        contentType: "application/json; charset=utf-8",
        // submit a get request to the restful service mktDetail.
        url: "http://search.ams.usda.gov/farmersmarkets/v1/data.svc/mktDetail?id=" + id,
        dataType: 'jsonp',
        jsonpCallback: 'detailResultHandler'
    });)

//iterate through the JSON result object.
function detailResultHandler(detailresults) {
    for (var key in detailresults) {
        alert(key);
        var results = detailresults[key];
        alert(results['GoogleLink']);
        var urlglink = (results["GoogleLink"]);
        var loca = (urlglink.split("q=")[1]);

        var lat = (loca.split("%2C%20")[0]);
        var long = (loca.split("%2C%20")[1]);
        var loc = (long.split("%20")[0]);
        var latlong = lat + "," + loc;

        var marker;
        if (firstpass === true) {
            var map = new google.maps.Map(document.getElementById('map-canvas'), {
                zoom: 10,
                center: new google.maps.LatLng(latlong),
                mapTypeId: google.maps.MapTypeId.ROADMAP
            });
            firstpass = false;
        }


        var infowindow = new google.maps.InfoWindow();
        marker = new google.maps.Marker({
            position: new google.maps.LatLng(latlong),
            map: map
        });
    }
}

1 个答案:

答案 0 :(得分:1)

Here,它显示设置jsonp: false

  

覆盖jsonp请求中的回调函数名称。这个值   将在'callback =?'中使用而不是'callback'的一部分   在url中查询字符串。所以{jsonp:'onJSONPLoad'}会导致   'onJSONPLoad =?传递给服务器。从jQuery 1.5开始,设置   jsonp选项为false可防止jQuery添加“?回调”   字符串到URL或尝试使用“=?”转型。在   在这种情况下,您还应该显式设置jsonpCallback设置。   例如,{jsonp:false,jsonpCallback:“callbackName”}

底部的示例,以及说:

的部分
  

...设置   jsonp选项为false可防止jQuery添加“?回调”   字符串到URL或尝试使用“=?”转型“......