문제

나는 돌아오고 싶다 StudentId 외부의 다른 곳에서 사용합니다 범위$.getJSON()

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

//use studentId here

나는 이것이 범위와 관련이 있다고 생각하지만, 같은 방식으로 작동하지 않는 것 같습니다. 씨# 하다

도움이 되었습니까?

해결책

예, 코드에주의를 기울이지 않았기 때문에 이전 대답은 작동하지 않습니다. :)

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

getjson 호출에 의해 설정된 StudentID의 가치로 실행하려는 모든 코드는 발생해야합니다. 이내에 그 콜백 함수 또는 ~ 후에 콜백이 실행됩니다.

다른 팁

C#과 같은 방식으로 작동하지 않는 것 같습니다.

C#과 유사한 범위를 달성하려면 비동기 작업을 비활성화하고 데이터 유형을 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 문제를 일으키는 비동기를 실행합니다. 모든 코드를 리팩토링하는 대신 $.ajax 메소드 메인 .js 파일 상단에 다음을 삽입하여 비동기 동작을 비활성화하십시오.

 $.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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top