За такое небольшое количество тестов вы должны ожидать таких результатов:
Истинная случайность только предсказуема над огромным размером набора, так что вполне возможно перевернуть монету и получить 3 раза в голову сначала в строке, но в течение нескольких миллионов флип вам в итоге будет 50-50.
Да, мой предыдущий ответ не работает, потому что я не обращал внимания на Ваш код.:)
проблема состоит в том, что анонимная функция является функцией обратного вызова - т.е. getJSON является асинхронной операцией, которая возвратится в некотором неопределенном моменте времени, поэтому даже если бы объем переменной был за пределами той анонимной функции (т.е. закрытие), это не имело бы значения, Вы будете думать, что это должно:
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
Любой код, который Вы хотите выполнить со значением studentId, установленного вызовом getJSON, должен произойти или в , что функция обратного вызова или после обратный вызов выполняется.
Если Вы желаете делегату в других функциях, можно также расширить jQuery с помощью $ .fn. нотация как так:
var this.studentId = null;
$.getJSON(url, data,
function(result){
$.fn.delegateJSONResult(result.Something);
}
);
$.fn.delegateJSONResult = function(something){
this.studentId = something;
}
хм, если Вы сериализировали объект с StudentId
свойство тогда, я думаю, что это будет:
var studentId;
function(json) {
if (json.length > 0)
studentId = json[0].StudentId;
}
, Но если Вы просто возвращаетесь StudentId
самостоятельно, возможно, это:
var studentId;
function(json) {
if (json.length > 0)
studentId = json[0];
}
Редактирование: Или возможно .length
даже не требуется (я только возвратил универсальные наборы в JSON).
Редактирование № 2, это работает, я просто протестировал:
var studentId;
jQuery.getJSON(url, data, function(json) {
if (json)
studentId = json;
});
Редактирование № 3, вот фактический JS, который я использовал:
$.ajax({
type: "POST",
url: pageName + "/GetStudentTest",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: "{id: '" + someId + "'}",
success: function(json) {
alert(json);
}
});
И в 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
похоже, это не работает так же C # выполняет
Для достижения области видимости, аналогичной C #, отключите асинхронные операции и установите dataType равным json:
var mydata = [];
$.ajax({
url: 'data.php',
async: false,
dataType: 'json',
success: function (json) {
mydata = json.whatever;
}
});
alert(mydata); // has value of json.whatever