1

在 chrome 和 safari 中,以下代码可以正常工作。

firefox,所有平台,所有版本,它都不起作用并抛出一个错误,即对象未定义(来自 jQuery)在$.each循环中停止

此代码通过 AJAX 调用 json Web 服务并返回 JSON。

想法?

代码

 $.ajax({
    url: "URL GOES HERE",
    data: JSON.stringify({
        "geoNear": "geotestnew",
        "near": [-73.78086565, 41.014072],
        "maxDistance": 0.3
    }),
    type: "POST",
    crossDomain: true,
    contentType: "application/json",
    success: function(data) {
        var usthis = data.results;
        $.each(usthis, function(entryIndex, entry) {
            var newdis = this.dis * 69;
            $("#results").append('<br>');
            $("#results").append(newdis);
            $("#results").append('<br>');
            $("#results").append(this.obj.Name);
            $("#results").append('<br>');
        });
    },
    error: function(x, e) {
        $('body').html('error: ' + e);
    }
});
});​
4

2 回答 2

1

您还没有设置dataTypeajax 选项让 jQuery 知道期望的响应类型

   dataType:'json' // or 'jsonp' which it appears you may be using

http://api.jquery.com/jQuery.ajax/

于 2012-06-25T13:12:32.310 回答
0

我在这里看到了一些错误:

  1. 您没有设置数据类型。返回数据的格式由 dataType 属性决定。
  2. 您已将 crossDomain 设置为 true,但使用的是“json”的 contentType 而不是跨域请求所需的“jsonp”。
  3. 在使用json作为数据类型时,我一直使用data.dsuccess方法而不是data.results

这是我用于本地 json ajax 请求的代码:

    $.ajax({
        type: "POST",
        url: "/Svcs.asmx/GetStateProvOptions",
        dataType: "json",
        data: "{ 'countryID': '" + countryID + "' }",
        contentType: "application/json; charset=utf-8",
        success: function (data) {
            var result = data.d;
            var options = [];
            options.push('<option value="0" selected="selected">All</option>');
            for (var i = 0; i < result.length; i++) {
                options.push('<option value="', result[i].ID, '">', result[i].Value, '</option>');
            }
            $('.ddl').html(options.join(''));
        },
        error: Ajax_Error
    });

还可以查看$.ajax文档以获取更多信息。

这里有一个解释data.dhttp ://encosia.com/never-worry-about-asp-net-ajaxs-d-again/

于 2012-06-25T13:13:27.800 回答