2012-09-12 15 views
0

我想从不同的.js文件调用Ajax调用。我做了这样的事情:在不同的.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调用中捕获数据?

回答

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

当您进行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 
} 
});