努力将AJAX结果变量返回给JavaScript
请注意,以下$.ajax
来电是同步(async: false
)。
Ajax Call
function getState(callback) {
$.ajax({
url: 'getSearchState.php',
data: { "state": callback },
type: 'GET',
async: false,
success: function(result){
alert(result);
},
error: function(result) {
alert(result);
}
});
}
Ajax PHP
<?php
// Database Setup and Query
while ($row = $xxxxx->fetch(PDO::FETCH_ASSOC)) {
$StateVal = $row['State'];
}
return $StateVal;
?>
Javascript调用函数
var URL = District.trim();
var StateURL = getState(URL);
它可以从函数中修改URL,但不会返回任何内容。
任何帮助都会很棒!
答案 0 :(得分:2)
客户端和服务器端的代码都存在问题。
您的getState
永远不会返回任何内容,因此undefined
StateURL
除function getState(state) {
var result; // <=== Where we'll put our result
$.ajax({
url: 'getSearchState.php',
data: {"state": state},
type: 'GET',
async: false,
success: function(data) {
// Remember the result;
result = data;
},
error: function() {
result = /*...whatever you want to use to signal an error */;
}
});
// Return the result
return result;
}
以外的其他任何内容都不会感到惊讶。
不要使用同步ajax 。它造成了可怕的用户体验。但是,如果你真的,真的想继续使用它,那么你将如何:
state
请注意,我将参数名称更改为$.ajax
,因为它不是回调。
但是,请不要使用同步ajax。而是使用回调或承诺。
承诺:function getState(state) {
var result; // <=== Where we'll put our result
$.ajax({
url: 'getSearchState.php',
data: {"state": state},
type: 'GET',
async: false,
success: function(data) {
// Remember the result;
result = data;
},
error: function() {
result = /*...whatever you want to use to signal an error */;
}
});
// Return the result
return result;
}
已经返回一个承诺,所以直接返回:
state
请注意,我将参数名称更改为function getState(state) {
return $.ajax({
url: 'getSearchState.php',
data: {"state": state},
type: 'GET'
});
}
,因为它不是回调。
但是,请不要使用同步ajax。而是使用回调或承诺。
无极:
getState(URL)
.done(function(StateURL) {
// Use it
})
.fail(function() {
// Failed
});
用法:
function getState(state, callback) {
$.ajax({
url: 'getSearchState.php',
data: {"state": state},
type: 'GET',
success: function(data) {
// Call the callbback with the result
callback(data);
},
error: function() {
// Call the callback with an error
callback(/*...whatever you want to use tosignal an error */);
}
});
}
回调:
getState(URL, function(StateURL) {
// Use it, check for error
});
用法:
echo
作为RiggsFolly pointed out,您从您的PHP代码中返回字符串。但那不会输出它。要在客户端使用它,您需要输出它(例如,json_encode
和类似的)。为了让它能够被JavaScript轻松使用,您可能希望echo json_encode($stateVal);
确保它能够以JavaScript格式理解它:
success
然后在done
(或JSON.parse
)函数中,使用result = JSON.parse(data);
:
NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:NULL cacheName:@"myCache"];
答案 1 :(得分:-4)
这是jQuery,在这种情况下,您可以在该上下文中指定上下文和成功函数集变量....稍微粗略的解决方案,但它将起作用。另外看看ES6的箭头功能和承诺,它可以帮助你很多,并为你提供有关整个问题的新视角。
还有一件事!!默认情况下,Ajax是异步的,所以当数据准备就绪时你需要以某种方式通知你的StateURL(这里再次承诺给你服务)