当我警告从jsonServerResponse函数返回的值时,它的值是未定义的-尽管process.php页面返回了JSON。
function jsonServerResponse(operation, JSOoptionalData) {
JSOoptionalData = (typeof JSOoptionalData == "undefined") ? 'defaultValue' : JSOoptionalData
var jqxhr = $.ajax({
type: "POST",
url: "process.php",
data: "apicommand=" + JSOoptionalData,
success: function (json) {
return jQuery.parseJSON(json);
}
});
}
alert("Response as JS Object: "+jsonServerResponse("operation"));
我知道问题是在异步请求完成之前发出的警告函数,但我不确定如何解决这个问题。任何建议都是非常感谢的:)
发布于 2012-05-29 09:21:51
好吧,我从另一篇文章中发现了这一点。结果可以在成功回调中处理,也可以添加本身是回调函数的参数,并将ajax请求的结果应用于回调。
function jsonServerResponse(operation, callback, JSOoptionalData) {
JSOoptionalData = (typeof JSOoptionalData == "undefined") ? 'defaultValue' : JSOoptionalData
jqxhr = $.ajax({
type: "POST",
contentType: "application/json",
url: "process.php",
data: "apicommand=" + operation + "&optionaldata" + JSON.stringify(JSOoptionalData),
dataType: "json",
success: function (json) {
if(typeof callback === 'function') callback.apply(this, [json]);
}
});
}
jsonServerResponse("get_something_from_server", function(returnedJSO){
console.log(returnedJSO.Result.Some_data);
}, "optional_data");
和gdoron,您所询问的代码行使第三个参数成为可选的。我听说这是一个很好的实践,如果你打算向服务器传递一些数据(但你不知道有多少变量),添加一个可选的参数,只需传递一个js对象,将其转换为JSON字符串,并在服务器端解码。
和平!:)
发布于 2012-05-29 08:29:19
这是因为AJAX请求是异步的,所以在调用完成之前命中return
,因此函数总是返回null。
您需要从success
回调本身调用依赖于AJAX调用的代码。试试这个:
function jsonServerResponse(operation, JSOoptionalData) {
JSOoptionalData = (typeof JSOoptionalData == "undefined") ? 'defaultValue' : JSOoptionalData
var jqxhr = $.ajax({
type: "POST",
url: "process.php",
data: "apicommand=" + JSOoptionalData,
success: function (json) {
alert("Response as JS Object: " + json);
// to see more information about the object returned, use console.log:
console.log(json);
}
});
}
jsonServerResponse("operation")
发布于 2012-05-29 08:28:10
你解决了这个问题,ajax是异步操作,只能在成功回调中使用返回的数据:
function jsonServerResponse(operation, JSOoptionalData) {
// What that line suppose to do???
JSOoptionalData = (typeof JSOoptionalData == "undefined") ? 'defaultValue' : JSOoptionalData
var jqxhr = $.ajax({
type: "POST",
url: "process.php",
data: "apicommand=" + JSOoptionalData,
dataType: "json", // Change the dataType to json.
success: function (json) {
console.log("Response as JS Object:")
console.log(json);
}
});
}
https://stackoverflow.com/questions/10795516
复制相似问题