$ .getJson 함수에서 변수를 반환하려면 어떻게해야합니까?
-
09-06-2019 - |
문제
나는 돌아오고 싶다 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