$ http.get (…) .সুকস কোনও ফাংশন নয়


108

আমার এই কোডটি রয়েছে:

app.controller('MainCtrl', function ($scope, $http){
  $http.get('api/url-api')
    .success(function (data, status, headers, config){
     }
}

আমার স্থানীয় পরিবেশে, ঠিক আছে, কিন্তু একটি সার্ভারে এই ত্রুটিটি ফিরিয়ে দিন:

TypeError: $ http.get (...)। সাফল্য কোনও ফাংশন নয়

কোন ধারনা? ধন্যবাদ


1
স্থানীয় এনভিএম এবং সার্ভারে কোন সংস্করণ? BTW, $ http.get HttpPromise আসতে, তাই আপনি ব্যবহার করার প্রয়োজন তারপর পরিবর্তে
মধ্যে Grundy

আপনি কি সার্ভার পরিবেশে আপনার সমস্ত জাভাস্ক্রিপ্ট লোড করে দেখেছেন?
বানসী

7
এটি then()নয়success()
প্যাট্রিক ইভান্স

10
.successসিনট্যাক্স কৌণিক v1.4.3 সঠিক ছিল। পুরানো ডক্সটি
মিহাই মেটেই

5
এবং আনুষ্ঠানিকভাবে v.1.6 এ সরানো হয়েছে
অ্যাডামপোর্ট 21

উত্তর:


212

.successসিনট্যাক্স কৌণিক v1.4.3 সঠিক ছিল।

কৌণিক v.1.6 পর্যন্ত সংস্করণগুলির জন্য, আপনাকে thenপদ্ধতিটি ব্যবহার করতে হবে । then()উত্তর: পদ্ধতি দুটি আর্গুমেন্ট লাগে successএবং একটি errorকলব্যাক যা একটি প্রতিক্রিয়া বস্তুর সঙ্গে ডাকা হবে।

then()পদ্ধতিটি ব্যবহার করে , callbackপ্রত্যাবর্তনের সাথে একটি ফাংশন সংযুক্ত করুন promise

এটার মতো কিছু:

app.controller('MainCtrl', function ($scope, $http){
   $http({
      method: 'GET',
      url: 'api/url-api'
   }).then(function (response){

   },function (error){

   });
}

এখানে রেফারেন্স দেখুন

Shortcut পদ্ধতি এছাড়াও উপলব্ধ।

$http.get('api/url-api').then(successCallback, errorCallback);

function successCallback(response){
    //success code
}
function errorCallback(error){
    //error code
}

প্রতিক্রিয়া থেকে আপনি যে ডেটা পাবেন সেটি JSONফর্ম্যাটে প্রত্যাশিত । JSON হ'ল ডেটা পরিবহনের এক দুর্দান্ত উপায় এবং এটি AngularJS এর মধ্যে ব্যবহার করা সহজ

২-এর মধ্যে প্রধান পার্থক্য হ'ল .then()কলটি একটি promise(একটি থেকে প্রত্যাবর্তিত মানের সাথে সমাধান করা callback) ফেরত দেয় যখন .success()নিবন্ধকরণের আরও traditionalতিহ্যগত উপায় callbacksএবং কোনওটি ফেরত দেয় না promise


আমি চেষ্টা করেছিলাম এবং তারপর ঠিকঠাক কাজ করি, ধন্যবাদ আলেকজান্দ্রু-আয়নুত মিহাই
আলেজো রাইবস

1
.successএবং .thenবিভিন্ন পরম নিন, তার জন্য অ্যাকাউন্ট করুন
ম্যাক্স কোরেটস্কিই

বিদ্যমান কোডটি পুনরায় লেখালেখি করে উপরে বর্ণিত দুটি আর্গুমেন্ট-ফাংশন (সাফল্য, ত্রুটি) উপস্থাপন করা সহজ হতে পারে এবং উদাহরণের মতো আলাদাভাবে নয়।
টনি সেপিয়া

"$ রিসোর্স (...)। পান (...)। তবে এটি কোনও ফাংশন নয়" ... ধারাবাহিকতার কথা বলতে গেলে কৌণিক জেএস এতটা কৃপণ কেন?
হোববামোক

8

এটি নিরর্থক হতে পারে তবে উপরোক্ত সর্বাধিক ভোট দেওয়া উত্তর বলে .then(function (success)এবং এটি আমার পক্ষে কৌনিক সংস্করণ হিসাবে কাজ করে নি 1.5.8। পরিবর্তে ব্যবহারের responseপরে ব্লকের ভিতরে response.dataআমার সন্ধানের জন্য আমার জসন ডেটা পেয়ে গেল।

$http({
    method: 'get', 
    url: 'data/data.json'
}).then(function (response) {
    console.log(response, 'res');
    data = response.data;
},function (error){
    console.log(error, 'can not get data.');
});

মানে ... তুমি চেষ্টা করেছ success.data? প্যারামিটারের নামটি এই ক্ষেত্রে গুরুত্বপূর্ণ নয়।
কেভিন বি

আমার কোড কাজ করে। আমি উপরের উত্তরটি অনুসরণ করলে আমি আটকে গেলাম। এটি আসলে তথ্য পাওয়ার এবং আপনার কনসোলে এটি লগ করার একটি উপায় সহ একটি উত্তর। এটি বিকাশকারীদের তাদের ব্রাউজারে কীভাবে তাদের ডেটা পরীক্ষা করতে পারে তা দেখাতে পারে। আমি এখানে শিরোনামে একই সঠিক ত্রুটির দ্বারা পরিচালিত হয়েছিল।
ইয়ান পোস্টন ফ্রেমার

$http.get('data/data.json').success(function(data) { data = data;}আমার উত্তর সহ পুরাতন কোডটি একজন বিকাশকারী এখন জানেন যে এটি data.dataকেবল নিজের দ্বারা ডেটা পেতে পারে না। সুতরাং আমার উত্তরটি এই ত্রুটি বার্তায় গুরুত্বপূর্ণ।
আয়ান পোস্টন ফ্রেমার

ভেরিয়েবলের নামটি কোনও পার্থক্য তৈরি করবে না, এটি হতে পারে success.dataবা response.dataঅন্য কিছু হতে পারে । আপনি এমনকি donaldTrump.dataএটি কাজ করবে ব্যবহার করতে পারে । যদিও আপনার বোধগম্য পরিবর্তনশীল নামগুলি ব্যবহার করা উচিত, এটি নিশ্চিত নয় যে এটি কোনওরকম অর্থবোধ করবে।
গৌরব আর্য

এটি কারণ সাফল্য অবজেক্টটির একটি অ্যারে dataরয়েছে যা আপনার সার্ভারের প্রতিক্রিয়া হিসাবে ডেটা ধারণ করে। আপনার সেই ডেটা অ্যারেটি ব্যবহার করতে হবে, ব্যবহার করে <yourSuccessObjectName>.data
গৌরব আর্য

3

আপনি যদি 21/10/2017 অনুসারে AngularJs 1.6.6 ব্যবহার করার চেষ্টা করছেন তবে নীচের প্যারামিটারটি .success হিসাবে কাজ করে এবং হ্রাস পেয়েছে। .পথ () পদ্ধতিটি দুটি আর্গুমেন্ট গ্রহণ করে: একটি প্রতিক্রিয়া এবং একটি ত্রুটি কলব্যাক যা প্রতিক্রিয়াটির সাথে ডাকা হবে।

 $scope.login = function () {
        $scope.btntext = "Please wait...!";
        $http({
            method: "POST",
            url: '/Home/userlogin', // link UserLogin with HomeController 
            data: $scope.user
         }).then(function (response) {
            console.log("Result value is : " + parseInt(response));
            data = response.data;
            $scope.btntext = 'Login';
            if (data == 1) {
                window.location.href = '/Home/dashboard';
             }
            else {
            alert(data);
        }
        }, function (error) {

        alert("Failed Login");
        });

উপরের স্নিপিট একটি লগইন পৃষ্ঠার জন্য কাজ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.