sourcecode

$.getJ에서 변수를 반환하려면 어떻게 해야 합니까?SON 함수

copyscript 2023. 2. 28. 23:43
반응형

$.getJ에서 변수를 반환하려면 어떻게 해야 합니까?SON 함수

돌아가고 싶다StudentId범위 밖의 다른 곳에 사용하다$.getJSON()

j.getJSON(url, data, function(result)
{
    var studentId = result.Something;
});

//use studentId here

스코핑과 관련이 있는 것 같습니다만, c#과 같은 방법으로 동작하지 않는 것 같습니다.

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

네, 당신의 코드에 주의를 기울이지 않았기 때문에 이전의 답변은 효과가 없습니다.:)

문제는 어나니머스 함수가 콜백 함수라는 것입니다.즉, 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

getJ에 의해 설정된 studentId 값을 사용하여 실행할 코드SON 콜은 콜백 함수 내에서 또는 콜백 실행 후에 실행해야 합니다.

위의 모든 것보다 더 간단합니다.앞서 설명한 바와 같이$.getJSON는 문제의 원인이 되는 비동기 기능을 실행합니다.모든 코드를 리팩터링하는 대신$.ajaxmethod는 메인 .disable 파일의 상단에 다음 내용을 삽입하여 비동기 동작을 비활성화합니다.

 $.ajaxSetup({
   async: false
 });

행운을 빕니다.

다른 함수에 위임하려면 다음과 같이 $.fn. 표기를 사용하여 jquery를 확장할 수도 있습니다.


var this.studentId = null;

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

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


var context;
$.ajax({
  url: 'file.json',
  async: false,
  dataType: 'json',
  success: function (json) {   
    assignVariable(json);
  }
});

function assignVariable(data) {
  context = data;
}
alert(context);

음, 만약 당신이 오브젝트를 시리얼화했다면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

언급URL : https://stackoverflow.com/questions/31129/how-can-i-return-a-variable-from-a-getjson-function

반응형