jQuery: সিঙ্ক্রোনাস এজেএক্স অনুরোধ সম্পাদন করা হচ্ছে


187

আমি অতীতে কিছু jQuery করেছি, কিন্তু আমি সম্পূর্ণরূপে এই আটকে আছে। আমি সিঙ্ক্রোনাস এজ্যাক্স কলগুলি ব্যবহার করার পক্ষে এবং বুদ্ধি সম্পর্কে জানি তবে এখানে এটির প্রয়োজন হবে।

রিমোট পৃষ্ঠাটি লোড করা হয়েছে (ফায়ারব্যাগ দিয়ে নিয়ন্ত্রিত), কিন্তু কোনও রিটার্ন প্রদর্শিত হবে না।

আমার ফাংশনটি সঠিকভাবে ফিরে আসার জন্য আমার আলাদা কী করা উচিত?

function getRemote() {

    var remote;

    $.ajax({
        type: "GET",
        url: remote_url,
        async: false,
        success : function(data) {
            remote = data;
        }
    });

    return remote;

}

আপনার কোডটি দুর্দান্ত দেখাচ্ছে। এটা কি ফিরছে? কোন জেএস ত্রুটি আছে?
শঙ্করসঙ্গোলি

11
আমি এটি বরং কৌতুকপূর্ণ মনে করি - আপনি কীভাবে "অ্যাসিনক্রোনাস জাভাস্ক্রিপ্ট এবং এক্সএমএল" ক্রিয়াকলাপটি সংলগ্নভাবে করবেন তা জিজ্ঞাসা করছেন। আপনার সত্যিই যা সম্পাদন করতে হবে তা হ'ল "এসজেএক্স"।
ভাইটালিব

3
দ্রষ্টব্য: বৈশিষ্ট সমলয় AJAX অনুরোধ বিনয়ী শুরু করেছে।
ল্যাও লাম

2
মনে হচ্ছে "[সিঙ্ক্রোনাস]" বিবৃতিটি জাভাস্ক্রিপ্ট ইঞ্জিনগুলির বোঝার অভাবকে বোঝায়, এইভাবে একটি দুর্বল আর্কিটেক্ট অ্যাপ। আমি বুঝতে চাই যে এমন কিছু ক্ষেত্রে রয়েছে যেখানে সত্যিকারের সিঙ্ক প্রয়োজন।
এএম

15
@ পিএমএন্ট seems that the statement "[synchronous] will be required" indicates a lack of understanding of JavaScript engines, thus a poorly architected app.বা খুব ভাল বোঝাপড়া: আপনি যদি একটি এজেএক্স কল করতে চান তবে onbeforeunloadএকটি সিঙ্ক্রোনাস অনুরোধটি ব্যবহার করা আসলে প্রস্তাবিত উপায় (অন্যথায় অনুরোধটি ফিরে আসার আগে ব্রাউজার উইন্ডোটি চলে যাবে)। যে কোনও উপায়ে তিনি স্পষ্টভাবে বলেছেন sy সিঙ্ক্রোনাস এজ্যাক্স কলগুলি ব্যবহার করার পক্ষে এবং কুফলগুলি সম্পর্কে আমি জানি `... সম্ভবত কেবল তাকে বিশ্বাস করবেন?
স্টিজন ডি উইট

উত্তর:


297

আপনি যখন একটি সুসংগত অনুরোধ করছেন, এটি হওয়া উচিত

function getRemote() {
    return $.ajax({
        type: "GET",
        url: remote_url,
        async: false
    }).responseText;
}

উদাহরণ - http://api.jquery.com/jQuery.ajax/#example-3

দয়া করে নোট করুন: মিথ্যাতে সেটিং ASYNC সম্পত্তি অবচিত এবং প্রক্রিয়ায় সরানো হচ্ছে ( লিংক )। ফায়ারফক্স এবং ক্রোম সহ অনেক ব্রাউজার ইতিমধ্যে কনসোলে একটি সতর্কতা মুদ্রণ শুরু করেছে আপনি যদি এটি ব্যবহার করেন:

ক্রোম:

মূল থ্রেডের সিঙ্ক্রোনাস এক্সএমএলএইচটিপিআরকেস্টটি শেষ ব্যবহারকারীর অভিজ্ঞতার ক্ষতিকারক প্রভাবগুলির কারণে হ্রাস করা হয়। আরও সহায়তার জন্য https://xhr.spec.hatwg.org/ দেখুন

ফায়ারফক্স:

মূল থ্রেডের সিঙ্ক্রোনাস এক্সএমএলএইচটিপিআরকেস্টটি শেষ ব্যবহারকারীর অভিজ্ঞতার ক্ষতিকারক প্রভাবগুলির কারণে হ্রাস করা হয়। আরও সহায়তার জন্য http://xhr.spec.hatwg.org/


16
নোট করুন যে responseTextসর্বদা একটি স্ট্রিং প্রদান করে। আপনি JSON আশা হয়, মোড়ানো $.ajaxসঙ্গে JSON.parse
usand Friends

6
দ্রষ্টব্য: xhr.spec.whatwg.org/#the-open()- আদর্শ সমসাময়িক অনুরোধগুলি অবচয় করা হয়েছে ...
টায়নন

5
@ টম এবং তেমন ট্যাগ <i>এবং ট্যাগও ছিল <b>। আমার প্রস্তাব: এই বৈশিষ্ট্যগুলি ব্যবহার করা চালিয়ে যান যাতে সেগুলি না যায়।
স্টিজন ডি উইট

1
এটি ব্রাউজারটিকে লক করে রাখায়, সময়সীমা: 5000 বা আরও বিকল্পগুলিতে যুক্ত করার অর্থ তৈরি হয়।
কমনপাইক

1
বস্তু @usandfriends পার্স স্ট্রিং এর জন্য JSON.parse পরিবর্তে jQuery.parseJSON ব্যবহার করতে আরও সুরক্ষিত ভাবে হয় stackoverflow.com/questions/10362277/...
AntonE

33

আপনি অজ্যাক্স ফাংশনটি ভুলভাবে ব্যবহার করছেন। এটি সিনক্রোনাস হওয়ায় এটি ডেটাকে ইনলাইন ফিরিয়ে আনবে:

var remote = $.ajax({
    type: "GET",
    url: remote_url,
    async: false
}).responseText;

17

কতটা দূরবর্তী ইউআরএল? এটা কি একই ডোমেইন থেকে? কোডটি ঠিক আছে বলে মনে হচ্ছে

এটা চেষ্টা কর

$.ajaxSetup({async:false});
$.get(remote_url, function(data) { remote = data; });
// or
remote = $.get(remote_url).responseText;

হাঁ! একই ডোমেন এবং সবকিছু। remote_urlযথাযথভাবে সংজ্ঞায়িত করা হয়েছে এবং এজেএক্স কলটি যথাযথভাবে করা হয়েছে (ফায়ারব্যাগের সাহায্যে নিয়ন্ত্রিত)। শুধু ফেরেনি!
শিল্প

3
function getRemote() {
    return $.ajax({
        type: "GET",
        url: remote_url,
        async: false,
        success: function (result) {
            /* if result is a JSon object */
            if (result.valid)
                return true;
            else
                return false;
        }
    });
}

7
এটি কেন ওপিকে সহায়তা করবে সে সম্পর্কে কিছু ব্যাখ্যা অন্তর্ভুক্ত করুন।
ক্রিলগার

সার্ভার দিক থেকে একটি জসন বস্তুটি ফিরিয়ে দেওয়া ভাল অনুশীলন। এটি আপনাকে আরও নিয়ন্ত্রণ দেয়। তবে, আপনাকে ডেটা টাইপ যুক্ত করতে হবে: উপরের আপনার aj .জ্যাক্স পরামিতিগুলিতে "json"।
jjwdesign

এর অর্থ কী: "এটি আপনাকে আরও নিয়ন্ত্রণ দেয়"?
গ্র্যান্টপর্পস

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