0

我想从不同的 .js 文件进行 Ajax 调用。我做了这样的事情:

function ajax(url,success,error)
{
    success+="(data)";
    error+="(xhr, ajaxOptions, thrownError)";

    console.log("Starting AJAX");
    console.log("Success function: " + success);
    console.log("Success function: " + error);

    $.ajax({                                                                   
        crossDomain: true,
        type: 'GET',
        url: url, 
        callback: 'jsonpCallback',
        jsonpCallback: 'jsonpCallback',
        jsonp: '_jsonp',
        scriptCharset: "utf-8",
        contentType:  'application/json',
        dataType: 'jsonp json',
        timeout : 5000,

        success: success_contact(data),
        error: error_contact(),
    });
}

还有函数success_contact 和error contact。我是这样开始的:

$(document).bind('pageinit', function() {
    ajax('http://topfirma-dev/topfirma-www/services/rest/contact/list','success_contact','error_contact');
});

调用了ajax调用,但是报错:

Uncaught ReferenceError: data is not defined 

这是我的问题。如何从我的 Ajax 调用中捕获数据?

4

2 回答 2

3

如果success_contacterror_contact在别处定义,您不需要在那里将它们称为函数,您只需告诉它们是哪些函数。

var success_contact = function (data) {
    /* do something */
}

var error_contact = function (jqXHR, textStatus, errorThrown) {
    /* do something */
}

// ...

$.ajax({                                                                   
    crossDomain: true,
    type: 'GET',
    url: url, 
    callback: 'jsonpCallback',
    jsonpCallback: 'jsonpCallback',
    jsonp: '_jsonp',
    scriptCharset: "utf-8",
    contentType:  'application/json',
    dataType: 'jsonp json',
    timeout : 5000,

    success: success_contact,
    error: error_contact,
});
于 2012-09-12T13:59:10.767 回答
1

当您进行 ajax 调用(或内联传递函数)时,您应该只将函数的名称传递给成功(和错误)属性。

例如

$.ajax({                                                                   
    crossDomain: true,
    type: 'GET',
    url: url, 
    callback: 'jsonpCallback',
    jsonpCallback: 'jsonpCallback',
    jsonp: '_jsonp',
    scriptCharset: "utf-8",
    contentType:  'application/json',
    dataType: 'jsonp json',
    timeout : 5000,

    success: success_contact,
    error: error_contact,
});

然后你应该声明success_contact(和error_contact)函数:

var success_contact = function(data) {
    console.log(data);
};

或者:

$.ajax({                                                                   
    crossDomain: true,
    type: 'GET',
    url: url, 
    callback: 'jsonpCallback',
    jsonpCallback: 'jsonpCallback',
    jsonp: '_jsonp',
    scriptCharset: "utf-8",
    contentType:  'application/json',
    dataType: 'jsonp json',
    timeout : 5000,

    success: function(data, textStatus, jqXHR) {
    console.log(data);
    // Do stuff
},
    error: function(jqXHR, textStatus, errorThrown) {
    // Do stuff
}
});
于 2012-09-12T14:00:57.993 回答