Как я могу возвратить переменную из $ .getJSON функция

За такое небольшое количество тестов вы должны ожидать таких результатов:

Истинная случайность только предсказуема над огромным размером набора, так что вполне возможно перевернуть монету и получить 3 раза в голову сначала в строке, но в течение нескольких миллионов флип вам в итоге будет 50-50.

51
задан AddWeb Solution Pvt Ltd 24 December 2015 в 19:44
поделиться

4 ответа

Да, мой предыдущий ответ не работает, потому что я не обращал внимания на Ваш код.:)

проблема состоит в том, что анонимная функция является функцией обратного вызова - т.е. 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, должен произойти или в , что функция обратного вызова или после обратный вызов выполняется.

39
ответ дан Jason Bunting 7 November 2019 в 09:57
поделиться

Если Вы желаете делегату в других функциях, можно также расширить jQuery с помощью $ .fn. нотация как так:


var this.studentId = null;

$.getJSON(url, data, 
    function(result){
      $.fn.delegateJSONResult(result.Something);
    }
);

$.fn.delegateJSONResult = function(something){
  this.studentId = something;
}


2
ответ дан 7 November 2019 в 09:57
поделиться

хм, если Вы сериализировали объект с 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
-2
ответ дан travis 7 November 2019 в 09:57
поделиться

похоже, это не работает так же 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
61
ответ дан 7 November 2019 в 09:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: