URL টি AJAX অনুরোধের জন্য jQuery এ একটি স্ট্রিং এনকোড করুন


217

আমি আমার অ্যাপ্লিকেশনটিতে গুগলের তাত্ক্ষণিক অনুসন্ধান প্রয়োগ করছি। আমি পাঠ্য ইনপুটটিতে ব্যবহারকারীর টাইপ হিসাবে এইচটিটিপি অনুরোধগুলি বন্ধ করে দিতে চাই। আমার একমাত্র সমস্যাটি হ'ল ব্যবহারকারী যখন প্রথম এবং শেষ নামগুলির মধ্যে একটি স্পেসে পৌঁছে যায়, স্থানটি একটি হিসাবে এনকোড হয় না +, সুতরাং অনুসন্ধানটি ভঙ্গ করে। আমি কীভাবে স্থানটি একটি এর সাথে প্রতিস্থাপন করতে পারি +, বা কেবল নিরাপদে ইউআরএল স্ট্রিংটিকে এনকোড করতে পারি?

$("#search").keypress(function(){       
    var query = "{% url accounts.views.instasearch  %}?q=" + $('#tags').val();
    var options = {};
    $("#results").html(ajax_load).load(query);
});

আপনি ব্যবহার করতে পারেন $.param
jpaugh

উত্তর:


490

এনকোডেরিকোন কম্পোনেন্ট চেষ্টা করুন ।

অক্ষরের ইউটিএফ -8 এনকোডিং উপস্থাপন করে নির্দিষ্ট অক্ষরের প্রতিটি উদাহরণকে এক, দুই, তিন বা চারটি পালানোর অনুক্রম দ্বারা প্রতিস্থাপন করে একটি ইউনিফর্ম রিসোর্স আইডেন্টিফায়ার (ইউআরআই) উপাদানকে এনকোড করে (দুটি "সারোগেটের সমন্বয়ে গঠিত অক্ষরের জন্য কেবল চারটি পালানোর ক্রম হবে) " চরিত্র).

উদাহরণ:

var encoded = encodeURIComponent(str);

2
এটি আমার সমস্যার সমাধান করেছে - যখন আমি আমার এজেএক্স অনুরোধটির প্যারামিটার হিসাবে কোনও ইউআরএল পাস করছিলাম তখন URL এর & এর মধ্যে যে কোনও ক্যোয়ারী স্ট্রিংয়ের পরে সবকিছু হারাচ্ছে। আমি যখন এটি যুক্ত করেছি, এটি আমার সমস্যার সমাধান করেছে। ধন্যবাদ!
জার্ম্ম

21

এনকোডিউরিকম্পোনমেন্টস আমার জন্য ভাল কাজ করে। আমরা এজল কলটিতে এর মতো ইউআরএল দিতে পারি below নীচে দেখানো কোড:

  $.ajax({
    cache: false,
    type: "POST",
    url: "http://atandra.mivamerchantdev.com//mm5/json.mvc?Store_Code=ATA&Function=Module&Module_Code=thub_connector&Module_Function=THUB_Request",
    data: "strChannelName=" + $('#txtupdstorename').val() + "&ServiceUrl=" + encodeURIComponent($('#txtupdserviceurl').val()),
    dataType: "HTML",
    success: function (data) {
    },
    error: function (xhr, ajaxOptions, thrownError) {
    }
  });

9

উত্তম উপায়:

এনকোডিউআরআইকিউম্পোন্টেটর নিম্নলিখিতগুলি বাদ দিয়ে সমস্ত অক্ষর থেকে পালিয়ে যায়:alphabetic, decimal digits, - _ . ! ~ * ' ( )

সার্ভারে অপ্রত্যাশিত অনুরোধগুলি এড়াতে আপনার কোনও ইউআরআই অংশ হিসাবে পাস করা হবে এমন কোনও ব্যবহারকারী-প্রবেশ করা প্যারামিটারগুলিতে এনকোডিউআরআইসি কম্পোনেন্টটি কল করা উচিত। উদাহরণস্বরূপ, কোনও ব্যবহারকারী একটি পরিবর্তনশীল মন্তব্যের জন্য "থাইমে এবং সময় = আবার" টাইপ করতে পারে। এই ভেরিয়েবলটিতে এনকোডেরিউআরকিউম্পোন্ট ব্যবহার না করা আবার মন্তব্য = থাইম% 20 এবং সময় = দেবে। নোট করুন যে অ্যাম্পারস্যান্ড এবং সমান চিহ্নটি একটি নতুন কী এবং মান জোড় চিহ্নিত করে। সুতরাং "থাইম এবং সময় = আবার" এর সমান পোষ্ট মন্তব্য কী থাকার পরিবর্তে আপনার কাছে দুটি পোষ্ট কী রয়েছে, একটি "থাইম" এর সমান এবং আরেকটি (সময়) আবার সমান।

অ্যাপ্লিকেশন / x-www-form-urlencoded (POST) এর জন্য, http://www.w3.org/TR/html401/interac...m- কনটেন্ট- টাইপ অনুযায়ী , স্পেসগুলি '+' দ্বারা প্রতিস্থাপন করতে হবে, তাই "+" এর সাথে "% 20" এর অতিরিক্ত প্রতিস্থাপনের সাথে একটি এনকোডেরিউআইআরকিউম্পোন্ট প্রতিস্থাপন অনুসরণ করতে পারে।

যদি কেউ আরএফসি 3986 (যা সংরক্ষণ করে!, ', (,), এবং *) মেনে চলা আরও কঠোর হতে চায় তবে এই অক্ষরগুলির কোনও আনুষ্ঠানিকভাবে ইউআরআই বিস্মরণ ব্যবহার নেই, তবে নিম্নলিখিতগুলি নিরাপদে ব্যবহার করা যেতে পারে:

function fixedEncodeURIComponent (str) {
  return encodeURIComponent(str).replace(/[!'()]/g, escape).replace(/\*/g, "%2A");
}

1
For application/x-www-form-urlencoded (POST), per http://www.w3.org/TR/html401/interac...m-content-type, spaces are to be replaced by '+', so one may wish to follow a encodeURIComponent replacement with an additional replacement of "%20" with "+".এক কিভাবে এই কাজ করে?
ভিন্স ক্রোনলিন

1
তবে এটি কার্যকর হওয়ার জন্য একটি বার্ডকোড সমতুল্য হওয়া দরকার
মিঃ হেলিস

5

আমি এমভিসি 3 / সত্তা ফ্রেমওয়ার্কটি ব্যাক-এন্ড হিসাবে ব্যবহার করছি, ফ্রন্ট-এন্ড আমার সমস্ত প্রজেক্ট কন্ট্রোলারকে জ্যাকুরির মাধ্যমে গ্রাস করে, সরাসরি পোস্ট করে (p। পোষ্ট ব্যবহার করে) যখন আপনি ইউএসএল হার্ডকোড ছাড়াই সরাসরি অন্য প্যারামগুলি পাস করেন তখন ডেটা এনক্রিপশন লাগে না। আমি ইতিমধ্যে কয়েকটি অক্ষর পরীক্ষা করেছি এমনকি আমি একটি URL পাঠিয়েছি (এটি http://www.ihackforfun.eu/index.php?title=update-on-url-crazy&more=1&c=1&tb=1&pb=1 ) প্যারামিটার হিসাবে এবং আপনি কোনও ইউআরএল-এর মধ্যে সমস্ত ডেটা পাস করার সময় এনকোডিউআরআইআরকিউম্পোনেন্ট দুর্দান্ত কাজ করলেও কোনও সমস্যা নেই (হার্ডকোডযুক্ত)

হার্ডকোডযুক্ত ইউআরএল অর্থাৎ>

 var encodedName = encodeURIComponent(name);
 var url = "ControllerName/ActionName/" + encodedName + "/" + keyword + "/" + description + "/" + linkUrl + "/" + includeMetrics + "/" + typeTask + "/" + project + "/" + userCreated + "/" + userModified + "/" + status + "/" + parent;; // + name + "/" + keyword + "/" + description + "/" + linkUrl + "/" + includeMetrics + "/" + typeTask + "/" + project + "/" + userCreated + "/" + userModified + "/" + status + "/" + parent;

অন্যথায় এনকোডিউআরআইসি কম্পোনেন্ট ব্যবহার করবেন না এবং এর পরিবর্তে এজাক্স পোস্ট পদ্ধতিতে প্যারামগুলি পাস করার চেষ্টা করুন

 var url = "ControllerName/ActionName/";   
 $.post(url,
        { name: nameVal, fkKeyword: keyword, description: descriptionVal, linkUrl: linkUrlVal, includeMetrics: includeMetricsVal, FKTypeTask: typeTask, FKProject: project, FKUserCreated: userCreated, FKUserModified: userModified, FKStatus: status, FKParent: parent },
 function (data) {.......});

3
সেই সময় সম্ভবত এটি আরও ভাল সমাধান হতে পারে :)
ব্রায়ান ডি

0

আর একবার চেষ্টা কর

var query = "{% url accounts.views.instasearch  %}?q=" + $('#tags').val().replace(/ /g, '+');

5
অ্যান্ডার্স ফেজেলস্টাডের সমাধান আরও ভাল। প্লাস চিহ্ন সহ স্পেসগুলি প্রতিস্থাপন কাজ করতে পারে তবে আপনার যদি অন্য অক্ষর থাকে (উমলুট ইত্যাদি), আপনি সমস্যার স্রোতে পড়তে চলেছেন।
উকু লসকিট

1
@ ইউকু: ওপি শ্বেতস্পেস + এর সাথে প্রতিস্থাপন করতে চেয়েছিল তাই আমি কীভাবে এটি করতে পারি তার উত্তর দিয়েছি। encodeURIComponent তাকে% 20 দেয়
জনন

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