AJAX

2015-09-05 7 views
14

के साथ व्यू डेटा प्रारंभ करना मैं AJAX क्वेरी के JsonResult से डेटा के साथ एक Vue पॉप्युलेट करने का प्रयास कर रहा हूं। जब मैं इसे अपने व्यू मॉडल से एन्कोड करता हूं तो मेरा वू डेटा को ठीक से प्राप्त करता है, लेकिन जब मैं AJAX का उपयोग करके इसे पुनर्प्राप्त करने का प्रयास नहीं करता हूं। यहां मेरा कोड कैसा दिखता है:AJAX

<script type="text/javascript"> 

     var allItems;// = @Html.Raw(Json.Encode(Model)); 

     $.ajax({ 
      url: '@Url.Action("GetItems", "Settings")', 
      method: 'GET', 
      success: function (data) { 
       allItems = data; 
       //alert(JSON.stringify(data)); 
      }, 
      error: function (error) { 
       alert(JSON.stringify(error)); 
      } 
     }); 

     var ItemsVue = new Vue({ 
      el: '#Itemlist', 
      data: { 
       Items: allItems 
      }, 
      methods: { 

      }, 
      ready: function() { 

      } 
     }); 
</script> 

<div id="Itemlist"> 
    <table class="table"> 
     <tr> 
      <th>Item</th> 
      <th>Year</th> 
      <th></th> 
     </tr> 
     <tr v-repeat="Item: Items"> 
      <td>{{Item.DisplayName}}</td> 
      <td>{{Item.Year}}</td> 
      <td></td> 
     </tr> 
    </table> 
</div> 

यह सभी उचित शामिल है। मुझे पता है कि @Url.Action("GetItems", "Settings") सही यूआरएल देता है और डेटा अपेक्षित रूप से वापस आता है (जैसा कि सफलता समारोह में एक चेतावनी द्वारा परीक्षण किया जाता है (AJAX में सफलता फ़ंक्शन में टिप्पणी देखें)। इसे इस तरह पॉप्युलेट करना: var allItems = @Html.Raw(Json.Encode(Model)); काम करता है, लेकिन AJAX क्वेरी नहीं करता है। मैं कुछ गलत कर रहा हूं?

+0

आप के बाद दृश्य के डेटा आइटम से अपडेट करना होगा आपको डेटा प्राप्त हुआ है। ध्यान दें, कि AJAX असीमित है (इसलिए नाम), तो आपके पास केवल 'सफलता' कॉलबैक फ़ंक्शन में डेटा होगा! – Jeff

+0

मैं यह कैसे कर सकता हूं? मैं ItemsVue.data नहीं कर सकता। ठीक है? मुझे यकीन नहीं है कि उस बिंदु पर इसे कैसे अपडेट किया जाए ... – muttley91

+0

मुझे लगता है कि मैं सिर्फ 'सफलता' कॉलबैक फ़ंक्शन में अपना वू बना सकता हूं! – muttley91

उत्तर

37

आप आरोही फ़ंक्शन के अंदर AJAX कॉल (Vuejs 1.x में "तैयार" बना सकते हैं।

<script type="text/javascript"> 
var ItemsVue = new Vue({ 
    el: '#Itemlist', 
    data: { 
     items: [] 
    }, 
    mounted: function() { 
     var self = this; 
     $.ajax({ 
      url: '/items', 
      method: 'GET', 
      success: function (data) { 
       self.items = data; 
      }, 
      error: function (error) { 
       console.log(error); 
      } 
     }); 
    } 
}); 
</script> 

<div id="Itemlist"> 
    <table class="table"> 
     <tr> 
      <th>Item</th> 
      <th>Year</th> 
     </tr> 
     <tr v-for="item in items"> 
      <td>{{item.DisplayName}}</td> 
      <td>{{item.Year}}</td> 
     </tr> 
    </table> 
</div> 
+1

देखें, मैंने कोशिश की। शायद मैं कुछ और गलत कर रहा था, मुझे यकीन नहीं है। – muttley91

+3

क्या यह मान नहीं है कि 'self.data.Items = data'? – Shikloshi

+1

मूल "इस" दायरे के संदर्भ के रूप में "स्वयं" सेटिंग कुंजी –

-8

बेहतर आप उपयोग करना

$("#Itemlist").load(yourUrl, function() { 
    alert("Load was performed."); 
}); 

कृपया की जरूरत wold अधिक here

1

मैं AJAX पर सफलता हैंडलर भीतर मेरे आवश्यक कार्रवाई प्रदर्शन से मेरी समस्या का समाधान करने में सक्षम था कॉल करें। आप या तो पूरे वू ऑब्जेक्ट सृजन को वहां रख सकते हैं, या बस आपको आवश्यक डेटा सेट करें।

+0

वोटों में नीचे बनाते हैं तो आपको केवल वैश्विक दायरे में var को परिभाषित करना होगा, क्या यह इस तरह से काम करना बुरा है? – edward

+0

कृपया कोड साझा करें ... – Stephane

+0

@ muttley91 हालांकि यह तरीका काम करेगा, इसका मतलब यह सही नहीं है, निश्चित रूप से यह स्वीकार्य उत्तर नहीं होना चाहिए। प्रश्न पोस्ट करने के लिए धन्यवाद। –

-2
वहाँ

एक और तरीका है:

new Vue({ 
el:"#app", 

data:{ 
    populateByAjax:{} 

}, 

beforeCompile: function() { 
    this.getRequestByAjax(); 
}, 
methods:{ 
getRequestByAjax:function(){ 
     var xhr = new XMLHttpRequest(); 
     var args = "action=lol"; 
     var self = this; 

     xhr.open('POST', './filephp', true); 
     xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 

     xhr.onready = function (aEvt) { 
      if(xhr.readyState == 4 && xhr.status==200) { 
       self.populateByAjax = JSON.parse(xhr.responseText); 
       console.log(self.populateByAjax); 
      } 
     } 
     xhr.send(args); 
    } 
} 

और भूल नहीं है के साथ अपने * .php फ़ाइल खत्म:

echo json_encode($result); 
+1

क्या PHP फ़ाइल? यह लड़का '@ Url.Action (" GetItems "," सेटिंग्स ") का उपयोग कर रहा है, जो मुझे बताता है कि यह एक एएसपी.नेट भाषा है। – Jujunol