javascript - 读取 JSON 时出现问题

标签 javascript jquery ajax json jsonp

我很难阅读以下 JSON(基本上没有错误,也没有发生任何事情),并且希望获得帮助来识别该函数的问题。我不清楚 ajax 是否成功捕获它,或者只是之后没有正确读取它。任何帮助将不胜感激!

以下是 JSON 响应的结构:

   [{"attributes":{"type":"Account","url":"/services/data/v25.0/sobjects/Account/00130000015KJlWAAW"},"id":"00130000015KJlWAAW","locname":"Central Valley Ag","address":"607 North Robinson","city":"Hartington","state":"NE","postal":"68739","phone":"402-254-3354","web":"","lat":"42.627212","lng":"-97.269283"},{"attributes":{"type":"Account","url":"/services/data/v25.0/sobjects/Account/00130000015KJlXAAW"},"id":"00130000015KJlXAAW","locname":"Central Valley Ag","address":"709 Centennial Rd","city":"Wayne","state":"NE","postal":"68787","phone":"402-375-3510","web":"","lat":"42.235756","lng":"-96.998321"}]
<小时/>

这是处理 JSON 的脚本部分:

   function mapping(orig_lat, orig_lng, origin) {
                $(function () {
                    var dataType;
                    //jsonData is set to true
                    if (settings.jsonData == true) {
                        dataType = "jsonp";
                    } else {
                        dataType = "xml";
                    }
                    $.ajax({
                        type: "GET",
                        url: settings.dataLocation,
                        dataType: dataType,
                        crossDomain: true,                            
                        error: function(jqXHR, textStatus, errorThrown) {   
                    alert('Error Message: '+textStatus);
                    alert('HTTP Error: '+errorThrown);
                },
                        success: function (data) {
                            //After the store locations file has been read successfully
                            var i = 0;

                            if (settings.jsonData == true) {
                                var data = $.parseJSON(data);
                                //Process JSON
                                $.each(data, function () {
                                    var name = this.locname;
                                    var lat = this.lat;
                                    var lng = this.lng;
                                    var address = this.address;
                                    var address2 = this.address2;
                                    var city = this.city;
                                    var state = this.state;
                                    var postal = this.postal;
                                    var phone = this.phone;
                                    var web = this.web;
                                    web = web.replace("http://", "");
                                    var distance = GeoCodeCalc.CalcDistance(orig_lat, orig_lng, lat, lng, GeoCodeCalc.EarthRadiusInMiles);
                                    //Create the array
                                    locationset[i] = new Array(distance, name, lat, lng, address, address2, city, state, postal, phone, web);
                                    i++;
                                });
                            } else {
                                //Process XML
                                $(data).find('marker').each(function () {
                                    //Take the lat lng from the user, geocoded above
                                    var name = $(this).attr('name');
                                    var lat = $(this).attr('lat');
                                    var lng = $(this).attr('lng');
                                    var address = $(this).attr('address');
                                    var address2 = $(this).attr('address2');
                                    var city = $(this).attr('city');
                                    var state = $(this).attr('state');
                                    var postal = $(this).attr('postal');
                                    var phone = $(this).attr('phone');
                                    var web = $(this).attr('web');
                                    web = web.replace("http://", "");
                                    var distance = GeoCodeCalc.CalcDistance(orig_lat, orig_lng, lat, lng, GeoCodeCalc.EarthRadiusInMiles);
                                    //Create the array
                                    locationset[i] = new Array(distance, name, lat, lng, address, address2, city, state, postal, phone, web);
                                    i++;
                                });
                            }

更新:我添加了一个 ajax 错误处理程序作为状态,并在加载页面时收到以下解析错误:

HTTP 错误:错误: jQuery172036075869924388826_1343923258757 未被调用

然后,当我尝试运行该函数时,出现以下错误:

Uncaught TypeError: Property 'alert' of object [object Window] is not a function          dealer-locator-iframe2:273
$.fn.storeLocator.each.$.ajax.error dealer-locator-iframe2:273
f.Callbacks.o jquery.min.js:2
f.Callbacks.p.fireWith jquery.min.js:2
w jquery.min.js:4
f.ajaxTransport.send.d.onload.d.onreadystatechange

最佳答案

看起来您需要在 data 变量上运行 $.parseJSONdata 以 JSON 字符串的形式返回,您需要将其转换为 JavaScript 对象文字。

示例:

var obj = $.parseJSON('{"name":"John"}');
alert( obj.name === "John" );

因此,请将其放在 success 函数中的 if (settings.jsonData == true) 之后:

var data = $.parseJSON(data);

您没有收到任何错误的原因是因为 $.each(function() {....}); 没有循环,因为没有任何内容可以循环在一根绳子上。

有一种非常简单的方法来测试 data 变量的数据类型。在 success 函数的开头使用它:

alert(typeof(data));

如果返回string,那么您就知道问题所在。

关于javascript - 读取 JSON 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11780410/

相关文章:

javascript - 如何使用angularJS过滤选中的复选框

javascript - 返回HTML5页面时如何触发函数? (javascript)

javascript - Excel - json数据 - 将某些元素返回到相邻单元格公式/宏

jquery - 在其中剪切一个div和html,然后使用jquery将其粘贴到不同的div中

javascript - addClass 到 wrapAll 结果

javascript - 在另一个函数内运行函数,但仅在 ajax 完成后运行

java - GWT - 片段中的参数

javascript - 随机 Jquery 异常错误

javascript - 将事件绑定(bind)到 ajax 成功返回的 View 中的元素

javascript - jQuery Forms - Ajax 和普通提交相同的表单