在跨域ajax post中的回调函数中获取未定义

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在跨域ajax post中的回调函数中获取未定义相关的知识,希望对你有一定的参考价值。

我正在尝试向我的烧瓶应用程序发出ajax post请求并在回调函数中获得答案。不幸的是我得到了未定义的值而不是json。

将不胜感激任何帮助!

我的服务器端代码:

application = Flask(__name__)
CORS(application)

...

@application.route('/get_forecast', methods=['POST', 'GET'])
def get_forecast():
    if request.method == 'POST':
        print('in post')
        predictions = {} 
        predictions['data'] = calc_forecast(request.get_json()["data"])
        print(predictions)
        return jsonify(predictions)

我的客户端代码:

  $.ajax({
            type: "POST", 
            url: "http://localhost:5000/get_forecast",
            data: JSON.stringify(markers),
            dataType: 'json',
            crossDomain: true,
            contentType: "application/json",
            done: function(resp, status){
                console.log('done')
                console.log(resp)
                console.log(status)
                console.log('=====')
                }(),
            fail: function(xhr, ajaxOptions, thrownError){
                console.log('fail');
                console.log(thrownError)
                }()

        });

这是我在烧瓶终端中得到的:

 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [02/Dec/2018 12:59:53] "OPTIONS /get_forecast HTTP/1.1" 200 -
in post
{'data': [10.15451836569513, 56.578480707072714, 12.435548873275337]}
127.0.0.1 - - [02/Dec/2018 12:59:53] "POST /get_forecast HTTP/1.1" 200 -

这是我在chrome控制台中得到的:

demo.html:228 done
demo.html:229 undefined
demo.html:230 undefined
demo.html:231 =====
demo.html:234 fail
demo.html:235 undefined
答案

如果你看看http://api.jquery.com/jQuery.ajax/上的例子,他们看起来与你对$.ajax的调用有很大的不同。我调整了你的代码以更好地类似于示例。也许这有帮助吗?

$.ajax({
    type: "POST", 
    url: "http://localhost:5000/get_forecast",
    data: JSON.stringify(markers),
    dataType: 'json',
    crossDomain: true,
    contentType: "application/json"
    })
    .done(function (data, textStatus, jqXHR) {
        console.log('done');
        console.log(data);
        console.log(textStatus);
        console.log('=====');
    })
    .fail(function (jqXHR, textStatus, errorThrown) {
        console.log('fail');
        console.log(textStatus);
    });

我想,你在寻找successerror设置。


更新:是的,我很确定,你的设置donefail是错误的。你想使用successerror

另外,看看https://stackoverflow.com/a/10931891/1621041

这意味着,如果您想将所有内容放入$.ajax调用的设置中,您的代码也可能如下所示:

$.ajax({
    type: "POST", 
    url: "http://localhost:5000/get_forecast",
    data: JSON.stringify(markers),
    dataType: 'json',
    crossDomain: true,
    contentType: "application/json",
    success: function (data, textStatus, jqXHR) {
        console.log('done');
        console.log(data);
        console.log(textStatus);
        console.log('=====');
    },
    error: function (jqXHR, textStatus, errorThrown ) {
        console.log('fail');
        console.log(errorThrown);
    }
});

以上是关于在跨域ajax post中的回调函数中获取未定义的主要内容,如果未能解决你的问题,请参考以下文章

解决jquery ajax在跨域访问post请求的时候,ie9以下无效(包括ie9)的问题

Jsonp实现跨域原理

Jquery $.ajax 在跨域调用的 IE 中失败

jQuery中的ajax问题

ajax回调函数回调无法获取返回值

Ajax跨域请求携带cookie问题