javascript - valor - ¿Cómo puedo devolver una variable desde una función $.getJSON?
retornar valor de una funcion javascript a php (6)
Deseo devolver StudentId
para utilizar en otro lugar fuera del alcance de $.getJSON()
j.getJSON(url, data, function(result)
{
var studentId = result.Something;
});
//use studentId here
Me imagino que esto tiene que ver con el alcance, pero no parece funcionar de la misma manera que C #
no parece funcionar de la misma manera que C #
Para lograr un alcance similar a C #, deshabilite las operaciones asincrónicas y configure dataType en json:
var mydata = [];
$.ajax({
url: ''data.php'',
async: false,
dataType: ''json'',
success: function (json) {
mydata = json.whatever;
}
});
alert(mydata); // has value of json.whatever
Incluso más simple que todo lo anterior. Como se explicó anteriormente $.getJSON
ejecuta la $.getJSON
que causa el problema. En lugar de refacturar todo tu código al método $.ajax
, simplemente inserta lo siguiente en la parte superior de tu archivo .js principal para deshabilitar el comportamiento asincrónico:
$.ajaxSetup({
async: false
});
¡buena suerte!
Sí, mi respuesta anterior no funciona porque no presté atención a tu código. :)
El problema es que la función anónima es una función de devolución de llamada, es decir, getJSON es una operación asíncrona que retornará en algún punto indeterminado, por lo que incluso si el alcance de la variable estuviera fuera de esa función anónima (es decir, un cierre), no tiene el valor que crees que debería:
var studentId = null;
j.getJSON(url, data, function(result)
{
studentId = result.Something;
});
// studentId is still null right here, because this line
// executes before the line that sets its value to result.Something
Cualquier código que desee ejecutar con el valor de studentId establecido por la llamada getJSON debe suceder dentro de esa función de devolución de llamada o después de que se ejecute la devolución de llamada.
Si desea delegar en otras funciones, también puede extender jquery con $ .fn. notación como tal:
var this.studentId = null;
$.getJSON(url, data,
function(result){
$.fn.delegateJSONResult(result.Something);
}
);
$.fn.delegateJSONResult = function(something){
this.studentId = something;
}
hmm, si has serializado un objeto con la propiedad StudentId
, entonces creo que será:
var studentId;
function(json) {
if (json.length > 0)
studentId = json[0].StudentId;
}
Pero si solo devuelve el StudentId
sí mismo, tal vez sea:
var studentId;
function(json) {
if (json.length > 0)
studentId = json[0];
}
Editar: O tal vez .length
ni siquiera es obligatorio (solo he devuelto colecciones genéricas en JSON).
Editar # 2, esto funciona, acabo de probar:
var studentId;
jQuery.getJSON(url, data, function(json) {
if (json)
studentId = json;
});
Edite # 3, aquí está el JS real que utilicé:
$.ajax({
type: "POST",
url: pageName + "/GetStudentTest",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: "{id: ''" + someId + "''}",
success: function(json) {
alert(json);
}
});
Y en aspx.vb:
<System.Web.Services.WebMethod()> _
<System.Web.Script.Services.ScriptMethod()> _
Public Shared Function GetStudentTest(ByVal id As String) As Integer
Return 42
End Function
var context;
$.ajax({
url: ''file.json'',
async: false,
dataType: ''json'',
success: function (json) {
assignVariable(json);
}
});
function assignVariable(data) {
context = data;
}
alert(context);