我试图从包含ajax调用的函数返回一个值(请参阅下面的代码)。
returnValue变量在警报和返回时未定义。有人可以帮忙吗?
function getLightboxImages(){
var returnValue;
jQuery.ajax({
url: "http://test.domain.com/WebService.svc/GetAllI",
data: { id: "2", hash:"MaD01" },
async: false,
dataType: "jsonp",
success: function (result) {
returnValue = result
}
});
alert(returnValue);
return returnValue;
}
答案 0 :(得分:2)
警报必须放在成功函数中,因为当ajax返回时会调用。您上面的内容将发送请求,然后在请求完成之前尝试提醒返回的值。
答案 1 :(得分:2)
尝试此代码,对于JSONP,您必须使用回调函数而不是成功方法。
$.ajax({
url: 'http://test.domain.com/WebService.svc/GetAllI',
type: 'GET',
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "jsonp",
jsonp: "callback",
jsonpCallback: "jsonpCallbackfunction",
error: function () {
alert("Error in Jsonp");
}
});
function jsonpCallbackfunction(responseData) {
alert(responseData);
}
http://cmsnsoftware.blogspot.com/2012/02/how-to-use-cross-domain-ajax-request.html#0
答案 2 :(得分:1)
function getLightboxImages(){
var returnValue;
jQuery.ajax({
url: "http://test.domain.com/WebService.svc/GetAllI",
data: { id: "2", hash:"MaD01" },
async: false,
dataType: "jsonp",
success: function (result) {
returnValue = result
}
});
alert(JSON.stringify(returnValue));
return returnValue;
}
跨域请求只能是异步的,因为跨域请求依赖于动态脚本标记,该标记永远不能同步,必须使用数据类型json和GET方法。
对于相同的域请求,请尝试在警告之前对json对象进行字符串化,如上所述!
答案 3 :(得分:0)
您无法进行同步JSONP请求。
使用回调代替return:
function getLightboxImages(callback) {
jQuery.ajax({
url: "http://test.domain.com/WebService.svc/GetAllI",
data: { id: "2", hash:"MaD01" },
dataType: "jsonp",
success: function (result) {
callback(result);
}
});
}
用法:
getLightboxImages(function(result){
alert(result);
});