Ajax调用另一个.js文件

时间:2012-09-12 13:51:30

标签: ajax html5 jquery-mobile

我想从不同的.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和错误联系人。我是这样开始的:

$(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调用中捕获数据?

2 个答案:

答案 0 :(得分: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,
});

答案 1 :(得分:1)

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

e.g。

$.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
}
});