다른 Ajax 내의 vue js가 데이터를 가져오지만 보기를 렌더링하지 않습니다.
첫 번째 에이잭스 이후 추가 데이터를 얻어야 할 상황이 있습니다.mounted
기능) vuejs에서 두 번째 아약스를 넣었습니다.if
조건과 내부success
첫 번째 아약스의 함수!
동작하고 있으며 Vue Devtools에 크롬으로 데이터가 표시되지만 데이터가 렌더링되지 않습니다.
유사 코드:
var vm = new Vue({
el: '#messages',
data: {
participants: [],
active_conversation: '',
messages: []
},
methods: {
getParticipants: function () {
return this.$http.post('message/get-participants').then(
function (response) {
vm.participants = response.data.participants;
// if there is a conversation_id param in url
if (getUrlParameterByName('conversation_id')) {
// Second Ajax Is Called Here inside First Ajax
return vm.getConversationMessages (getUrlParameterByName('conversation_id')); // this ajax call is getting data but not showing in view
}
}
},
getConversationMessages : function(conv_id){
// Second Ajax Call to get Conversation messages
// and showing them , works onClick
return this.$http.post('message/get-messages/' + conv_id).then(
function (response) {
if (response.data.status == 'success') {
console.log(response.data.messages)
vm.messages = response.data.messages;
vm.$forceUpdate();
}
},
mounted: function () {
this.getParticipants()
}
})
특정 컨버세이션메시지를 받기 위한 두 번째 Ajax 콜이 응답하고 있다.onclick
이 함수가 First Ajax 성공 응답 내에서 사용되는 경우.getParticipants()
데이터를 올바르게 가져오고 DevTools VueJs Extension에서 메시지가 설정되었지만 보기에 메시지가 표시되지 않는 것을 확인할 수 있습니다. 시도했습니다.vm.$set()
기회가 없어요.
업데이트:
두 번째 Ajax는 오류 및 메시지 데이터 속성이 채워지지 않고 작동합니다(Vue DevTools를 선택). 유일한 문제는 보기에 메시지가 표시되지 않는다는 것입니다!!하지만 대화를 클릭해서 수동으로 하면 두 번째 에이잭스가 다시 실행되어 메시지를 볼 수 있습니다.vm.$forceUpdate()
두 번째 에이잭스에 이어 가망이 없어요
업데이트 2 html part (버그는 이쪽!!)
<a vbind:id="conv.id" v-on:click="getMessages(conv.id)" onclick="$('#user-messages').addClass('active')">
DOM은 Ajax 요청을 실행한 경우에만 메시지와 함께 업데이트됩니다.getConversationMessages
배치하지 않음getConversationMessages
Ajax 요구의 성공 콜백으로getParticipants
이 회선에서 에러가 발생하고 있는 것.
this.participants = response.data.participants;
Ajax 요청의 성공 콜백에 일반 함수를 사용하고 있습니다.그것이 원인입니다.this
vue 인스턴스를 가리키지 않음this.participants
정의되지 않은 오류가 나타납니다.사용방법vm
insteaad를 사용하여 프로그램의 다른 부분과 마찬가지로 vue 인스턴스를 가리킵니다.
vm.participants = response.data.participants;
편집
var vm = new Vue({
el: '#messages',
data: {
participants: [],
active_conversation: '',
messages: []
},
methods: {
getParticipants: function () {
return this.$http.post('message/get-participants');
},
getConversationMessages : function(conv_id){
return this.$http.post('message/get-messages/' + conv_id);
}
},
mounted: function () {
this.getParticipants().then(function (response){
vm.participants = response.data.participants;
if (getUrlParameterByName('conversation_id')) {
return vm.getConversationMessages (getUrlParameterByName('conversation_id')); // this ajax call is getting data but not showing in view
}
}).then(function(response){
if (response.data.status == 'success') {
console.log(response.data.messages)
vm.messages = response.data.messages;
});
}
})
첫 번째 http 콜백이 완료된 후 두 번째 http 요청을 호출하거나 Promise를 사용할 수도 있습니다.
return this.$http.post(function(response){
// first call
}).then(function(response){
// Second call
})
new Vue({
el: '#messages',
data: {
participants: [],
active_conversation: '',
messages: []
},
methods: {
async getParticipants (id) {
var response = await this.$http.post('message/get-participants')
this.participants = response.data.participants
if (id) this.getConversationMessages(id)
},
async getConversationMessages (id) {
var response = this.$http.post('message/get-messages/' + id)
if (response.data.status === 'success') {
console.log(response.data.messages)
this.messages = response.data.messages;
}
}
},
created () {
this.getParticipants(getUrlParameterByName('conversation_id'))
}
})
문제는 html로 되어 있어서 커스텀을 추가했습니다.onclick
이벤트와 Vuejs 이벤트가 충돌하고 있습니다.
언급URL : https://stackoverflow.com/questions/47420472/vue-js-ajax-inside-another-ajax-is-getting-data-but-not-rendering-view
'programing' 카테고리의 다른 글
MySQL/MariaDB에 저장 프로시저를 NULL 매개 변수 허용 안 함 (0) | 2022.10.30 |
---|---|
PHP에서 현재 기능을 실행하는 코드 라인 및 파일을 가져오시겠습니까? (0) | 2022.10.30 |
e. printStackTrace 등가 python (0) | 2022.10.30 |
문자열에 숫자만 포함되어 있는지 확인합니다. (0) | 2022.10.30 |
Jackson + Builder pattern? (0) | 2022.10.30 |