কৌণিক.জেএস এ জেএসওএনপি $ http.jsonp () প্রতিক্রিয়া পার্স করা


112

আমি কৌনিক $http.jsonp()অনুরোধটি ব্যবহার করছি যা কোনও ফাংশনে আবৃত জেসনকে সাফল্যের সাথে ফিরিয়ে দিচ্ছে:

var url = "http://public-api.wordpress.com/rest/v1/sites/wtmpeachtest.wordpress.com/posts?callback=jsonp_callback";

$http.jsonp(url).
    success(function(data, status, headers, config) {
        //what do I do here?
    }).
    error(function(data, status, headers, config) {
        $scope.error = true;
    });

ফিরে আসা ফাংশন-মোড়ানো-জেএসএনকে কীভাবে অ্যাক্সেস / পার্স করবেন?


4
জেএসএনপি দিয়ে আপনি "ফিরে আসা ফাংশন-মোড়ানো-জেএসএন অ্যাক্সেস / পার্স করবেন না"। আপনার কলব্যাক বলা হয়; এটি যুক্তি হিসাবে JSON ডেটা গ্রহণ করে receives
— ম্যাট বল

আমি এর মতো কিছু করার চেষ্টা করেছি
— অ্যাক্রোনিম

(দুঃখিত উপরের দিকে শীঘ্রই প্রবেশ করুন) আমার কলব্যাকটি কোন মুহুর্তে বলা হয়? একটি কোড স্নিপেট সত্যিই সহায়ক হবে। আমি এই সময়ে বিভিন্ন জিনিস চেষ্টা করেছি এবং স্ট্যাম্পড আছি।
— অ্যাক্রোনিম

প্রতিক্রিয়া ফিরে এলে কলব্যাক বলা হয়। আপনার কি কোনও নামকরণ আছে jsonp_callback? যদি না হয় তবে আপনার সমস্যা আছে।
— ম্যাট বল

এই মুহুর্তে আমি কেবল একটি সাধারণ ফাংশন লিখেছি মাত্র function jsonp_callback(data) { return data.found; //should be 3 }
— জাসনের

উত্তর:


300

আপডেট: কৌনিক 1.6 থেকে

কলব্যাকের প্যারামিটার মানটি কোথায় যেতে হবে তা নির্দিষ্ট করে দেওয়ার জন্য আপনি আর স্থানধারক হিসাবে JSON_CALLBACK স্ট্রিং ব্যবহার করতে পারবেন না

আপনার এখন কলব্যাকটিকে অবশ্যই এর মতো সংজ্ঞায়িত করতে হবে:

$http.jsonp('some/trusted/url', {jsonpCallbackParam: 'callback'})

পরিবর্তন / অ্যাক্সেস / এর মাধ্যমে পরম ঘোষণা করুন $http.defaults.jsonpCallbackParam, এতে ডিফল্ট হয়callback

দ্রষ্টব্য: আপনার ইউআরএল বিশ্বস্ত / শ্বেত তালিকাতে যুক্ত হয়েছে তাও আপনাকে অবশ্যই নিশ্চিত করতে হবে:

$sceDelegateProvider.resourceUrlWhitelist

বা এর মাধ্যমে সুস্পষ্টভাবে বিশ্বাসযোগ্য:

$sce.trustAsResourceUrl(url)

success/errorঅবচয় করা হয়েছিল ।

$httpউত্তরাধিকার প্রতিশ্রুতি পদ্ধতি successএবং errorঅবচিত হয়েছে এবং v1.6.0 মধ্যে সরানো হবে। পরিবর্তে স্ট্যান্ডার্ড পদ্ধতিটি ব্যবহার করুন। যদি $httpProvider.useLegacyPromiseExtensionsসেট করা থাকে falseতবে এই পদ্ধতিগুলি নিক্ষেপ করবে $http/legacy error।

ব্যবহার:

var url = "http://public-api.wordpress.com/rest/v1/sites/wtmpeachtest.wordpress.com/posts"
var trustedUrl = $sce.trustAsResourceUrl(url);

$http.jsonp(trustedUrl, {jsonpCallbackParam: 'callback'})
    .then(function(data){
        console.log(data.found);
    });

পূর্ববর্তী উত্তর: কৌণিক 1.5.x এবং তার আগে

আপনাকে যা করতে হবে পরিবর্তন callback=jsonp_callbackকরতে callback=JSON_CALLBACKযেমন:

var url = "http://public-api.wordpress.com/rest/v1/sites/wtmpeachtest.wordpress.com/posts?callback=JSON_CALLBACK";

এবং তারপরে .successফাংশনটি সফল হলে আপনার ফাংশনটি যেমন ফায়ার করা উচিত ততক্ষণ ।

এইভাবে এটি আপনাকে বিশ্বব্যাপী স্থান নষ্ট করতে বাধা দেয়। এটি এখানে AngularJS নথিভুক্ত করা হয় ।

এই পদ্ধতিটি ব্যবহার করতে ম্যাট বলের ফিডল আপডেট হয়েছে: http://jsfiddle.net/subhaze/a4Rc2/114/

সম্পূর্ণ উদাহরণ:

var url = "http://public-api.wordpress.com/rest/v1/sites/wtmpeachtest.wordpress.com/posts?callback=JSON_CALLBACK";

$http.jsonp(url)
    .success(function(data){
        console.log(data.found);
    });

5
খনি একটি ভিন্ন কলব্যাক ফিরিয়ে দিচ্ছে: কৌণিক.ক্যালব্যাকস। আমার কীভাবে এটি ঠিক করা উচিত?
— রাবারানা

@ eaon21 এর কি আপনার কোনও বেহাল দৃষ্টান্ত আছে?
— সাফ করুন

2
@ eaon21 তা-ই চেয়েছি আচরণ, কৌণিক পরিপূরক JSON_CALLBACK একটি dynamicly উত্পন্ন এক, আপনি বেতন নজরে এটা করতে হবে না এর
— Guillaume86

এবং উদাহরণস্বরূপ আপনি কীভাবে ইউটিউব এপি কল করবেন?
— জিনো

এটিআইপি সাথে কথোপকথনের জন্য তাদের নিজস্ব ক্লায়েন্ট সাইড লিব রয়েছে বলে মনে হয়। আপনার কাছে থাকা কোনও উদাহরণ যা আপনি করার চেষ্টা করছেন তা সংকুচিত করতে সহায়তা করতে পারে?
— subhaze

69

সবচেয়ে গুরুত্বপূর্ণ বিষয় আমি বেশ অল্প সময়ের জন্য বুঝতে পারে না যে অনুরোধ হবে , "কলব্যাক = JSON_CALLBACK" থাকতেই কারণ AngularJS মডিফাই অনুরোধ URL , "JSON_CALLBACK" জন্য একটি অনন্য শনাক্তকারী বদলে। সার্ভারের প্রতিক্রিয়া অবশ্যই "JSON_CALLBACK" হার্ড কোডিংয়ের পরিবর্তে 'কলব্যাক' প্যারামিটারের মানটি ব্যবহার করবে:

JSON_CALLBACK(json_response);  // wrong!

যেহেতু আমি আমার নিজের পিএইচপি সার্ভারের স্ক্রিপ্টটি লিখছিলাম, তাই আমি ভেবেছিলাম যে এটি কোন ফাংশনটির নাম জানতে চাইবে এবং অনুরোধে "কলব্যাক = জেএসএন_ক্যালব্যাক" পাস করার দরকার নেই। বড় ভুল!

AngularJS অনুরোধে "JSON_CALLBACK" এর পরিবর্তে একটি অনন্য ফাংশন নাম ("কলব্যাক = অ্যাঙ্গুলারক্যালব্যাকস _0.০" এর মত) প্রতিস্থাপন করে এবং সার্ভারের প্রতিক্রিয়াতে অবশ্যই সেই মানটি ফেরত দিতে হবে:

angular.callbacks._0(json_response);

2
আমরা কলব্যাকের নাম পরিবর্তন করতে পারি এমন কোনও উপায় আছে যাতে এটি হার্ড-কোডেড স্ট্যাটিক jsonফাইলের সাথে কাজ করে ।
— পাভেল নিকোলভ

9

এটি খুব সহায়ক ছিল। কৌণিক জিকুয়েরির মতো ঠিক কাজ করে না। এটির নিজস্ব জসনপ () পদ্ধতি রয়েছে, যার জন্য ক্যোয়ারী স্ট্রিংয়ের শেষে অবশ্যই "& কলব্যাক = JSON_CALLBACK" প্রয়োজন। এখানে একটি উদাহরণ:

var librivoxSearch = angular.module('librivoxSearch', []);
librivoxSearch.controller('librivoxSearchController', function ($scope, $http) {
    $http.jsonp('http://librivox.org/api/feed/audiobooks/author/Melville?format=jsonp&callback=JSON_CALLBACK').success(function (data) {
        $scope.data = data;
    });
});

তারপরে আপনার কৌনিক টেম্পলেটে or {ডেটা} display প্রদর্শন করুন বা ম্যানিপুলেট করুন।


4

এটি আপনার পক্ষে ঠিক কাজ করা উচিত, যতক্ষণ jsonp_callbackনা বিশ্বব্যাপী কর্মক্ষেত্রে ফাংশনটি দৃশ্যমান হয়:

function jsonp_callback(data) {
    // returning from async callbacks is (generally) meaningless
    console.log(data.found);
}

var url = "http://public-api.wordpress.com/rest/v1/sites/wtmpeachtest.wordpress.com/posts?callback=jsonp_callback";

$http.jsonp(url);

পূর্ণ ডেমো: http://jsfiddle.net/mattball/a4Rc2/ (অস্বীকৃতি: আমি এর আগে কোনও অ্যাংুলার জেএস কোডটি কখনও লিখিনি)


এটা এটা! এটি আমি যে গোলযোগের মধ্যে ছিলাম তা প্রমাণিত করে। ধন্যবাদ!
— অ্যাক্রোনিম

1
এই উত্তর খুব সহায়ক ছিল না। এটি AngularJS এর ​​সুযোগ অনুসরণ করে না।
— xil3

1
@ xil3 প্রতিক্রিয়া জন্য ধন্যবাদ; দুর্ভাগ্যক্রমে কেবল ওপি (এক্রোনিম) গ্রহণযোগ্য উত্তরটি স্যুইচ করতে পারে, আমাকে নয়।
— ম্যাট বল

@ ড্যানিয়েলবুরুগনারা দয়া করে এই উত্তরের পূর্ববর্তী মন্তব্যগুলি দেখুন।
— ম্যাট বল

4

আপনার এখনও callbackপ্যারামগুলিতে সেট করা দরকার :

var params = {
  'a': b,
  'token_auth': TOKEN,
  'callback': 'functionName'
};
$sce.trustAsResourceUrl(url);

$http.jsonp(url, {
  params: params
});

যেখানে 'ফাংশননেম' বিশ্বব্যাপী সংজ্ঞায়িত ফাংশনটির স্ট্রিংফাইড রেফারেন্স। আপনি এটিকে আপনার কৌনিক স্ক্রিপ্টের বাইরে সংজ্ঞায়িত করতে পারেন এবং তারপরে এটি আপনার মডিউলে নতুন সংজ্ঞা দিতে পারেন।


2

পার্সিংয়ের জন্য এটি করুন-

   $http.jsonp(url).
    success(function(data, status, headers, config) {
    //what do I do here?
     $scope.data=data;
}).

অথবা আপনি $ $ સ્કોপ.ডেটা = জেএসএন.স্ট্রিংফাই (ডেটা) ব্যবহার করতে পারেন;

কৌনিক টেমপ্লেটে আপনি এটি হিসাবে ব্যবহার করতে পারেন

{{data}}

0

আমার জন্য উপরের সমাধানগুলি কেবল একবার অনুরোধ পরামিতিগুলিতে "ফর্ম্যাট = jsonp" যুক্ত করার পরে কাজ করেছিল।


0

আমি কৌনিক ১.6.৪ ব্যবহার করছি এবং সুভাষ দ্বারা প্রদত্ত উত্তর আমার পক্ষে কার্যকর হয়নি। আমি এটিকে কিছুটা সংশোধন করেছি এবং তারপরে এটি কাজ করেছে - আপনাকে $ sce.trustAsResourceUrl দ্বারা ফিরে আসা মানটি ব্যবহার করতে হবে । সম্পূর্ণ কোড:

var url = "http://public-api.wordpress.com/rest/v1/sites/wtmpeachtest.wordpress.com/posts"
url = $sce.trustAsResourceUrl(url);

$http.jsonp(url, {jsonpCallbackParam: 'callback'})
    .then(function(data){
        console.log(data.found);
    });
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.