জুমলা ফ্রেমওয়ার্ক ব্যবহার করে জেএসএন ফিরিয়ে দিন


11

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

আমি সুরকার এবং জুমলার সাথে শুরু করা অনুসরণ করেছি ! নিবন্ধ এবং ফ্রেমওয়ার্ক অ্যাপ আপ এবং চলমান আছে। আমি আমার আইফ্রেমের জন্য কাজ করতে ডিফল্ট এইচটিএমএল আউটপুট কাস্টমাইজ করেছি এবং এপিআইতে শুরু করেছি। আমি নিউজকে টেমপ্লেট হিসাবে ব্যবহার করেছি এবং আমার API এর জন্য একটি নিয়ামক, মডেল, টেবিল এবং ভিউ তৈরি করেছি যা সব দুর্দান্ত কাজ করে works তারপরে আমি একটি খুব সাধারণ ট্যুইগ টেম্পলেট তৈরি করেছি যা আমার ডেটার মতো একটি জেএসওএন প্রতিনিধিত্ব করে:

{{ items|json_encode|raw }}

এখনও পর্যন্ত ভাল তবে আমি এই শিরোনামটি ফিরে পেয়েছি যা jQuery এর সাথে AJAX ব্যবহার করার সময় সমস্যার সৃষ্টি করবে:

Content-Type:text/html; charset=utf-8

আমি ভেবেছিলাম এটি এটিকে যুক্ত করার সহজ ঘটনা হবে তবে আমি এটি যেখানেই রেখেছি, এটি যে শিরোনামটি ফিরে এসেছে তা পরিবর্তন করে না:

$this->app->setHeader('Content-Type', 'application/json', true);

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

সুতরাং আমার প্রশ্নটি হচ্ছে, আমি কি এটি সঠিক পথে চলছি? আমার দর্শনটি ডিফল্ট এইচটিএমএল ভিউ প্রসারিত করে যা ভুল অনুভব করে, আমি কি একটি ডিফল্ট জেসনভিউ তৈরি করব? আমি কীভাবে সঠিক কন্টেন্ট-টাইপ সেট করতে পারি বা জেএসএন ফেরার জন্য আরও ভাল পদ্ধতির থাকতে পারে?

কোনও এপিআই তৈরির জন্য জুমলা ফ্রেমওয়ার্ক ব্যবহারের সর্বোত্তম উপায় সম্পর্কে যে কোনও পরামর্শের সহায়তা দেওয়া যেতে পারে তা প্রশংসিত হবে।

উত্তর:


6

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

আমি কোডটি অনুসরণ করেছি এবং অ্যাবস্ট্রাক ওয়েল অ্যাপ্লিকেশন.পিপি এই লাইনের সাথে শিরোনামগুলি সেট করে:

// Send the content-type header.
$this->setHeader('Content-Type', $this->mimeType . '; charset=' . $this->charSet);

সুতরাং আমি আমার কোডটিতে এটি ব্যবহার করে আমার নিজস্ব মাইমটাইপ সংজ্ঞায়িত করতে সক্ষম হয়েছি:

$this->app->mimeType = 'application/json';

এখন সঠিক শিরোনামটি ফিরে আসবে এবং jQuery আউটপুটটিকে JSON হিসাবে বুঝতে পারে!


3

কিছুটা খনন করেছিলাম তবে আমি বিষয়টি দেখতে পাচ্ছি

https://github.com/joomla-framework/application/blob/master/src/AbstractWebApplication.php

আপনি যদি সেটহাইডার ফাংশনটি দেখেন তবে এটি আসলে এখনও শিরোনামটি সেট করে না, এটি কেবল এটি "প্রস্তুত" হয়ে যায়

সুতরাং আপনার যা করা দরকার তা সহজ

$this->app->setHeader('Content-Type', 'application/json', true)->sendHeaders();

অতিরিক্ত ফাংশন sendHeaders()আপনাকে কেবল "প্রস্তুত" না করে শিরোনামগুলি সেট করার অনুমতি দেওয়ার জন্য বেঁধে রাখা যেতে পারে।

সম্ভবত exit;আর কোনও এক্সিকিউশন এবং আউটপুট প্রতিরোধ করতে ব্যবহার করে প্রেরণহাইডার্স ফাংশনটি সম্ভবত চালিত হচ্ছে না।


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

ঠিক আছে আমি অন্য সমাধান যুক্ত করব, ঠিক তেমনই আমার কাজ করে যার পক্ষে এটি প্রয়োজন হয়। আপনি যদি exitএটি ব্যবহার করেন তবে এটি চালানো থেকে আরও কিছু রোধ করা উচিত এবং এটি বর্তমানে যেমন রয়েছে ঠিক তেমন আউটপুট। যদিও আপনার উত্তরটি অনেক বেশি ভাল বলে মনে হচ্ছে।
জর্দান রামস্টাড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.