কৌণিক.জেএস এ জেএসওএনপি $ 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.