একাধিক আজাক্স কলগুলির জন্য jQuery কলব্যাক


132

আমি একটি ক্লিক ইভেন্টে তিনটি আজাক্স কল করতে চাই। প্রতিটি এজাক্স কল একটি আলাদা অপারেশন করে এবং চূড়ান্ত কলব্যাকের জন্য প্রয়োজনীয় ডেটা ফেরত দেয়। কলগুলি নিজেরাই একে অপরের উপর নির্ভরশীল নয়, সেগুলি একই সাথে যেতে পারে, তবে তিনটি সম্পূর্ণ হয়ে গেলে আমি চূড়ান্ত কলব্যাক করতে চাই।

$('#button').click(function() {
    fun1();
    fun2();
    fun3();
//now do something else when the requests have done their 'success' callbacks.
});

var fun1= (function() {
    $.ajax({/*code*/});
});
var fun2 = (function() {
    $.ajax({/*code*/});
});
var fun3 = (function() {
    $.ajax({/*code*/});
});


উত্তর:


112

এখানে আমি একটি কলব্যাক অবজেক্ট লিখেছি যেখানে আপনি সমস্ত সম্পূর্ণ হয়ে গেলে আপনি একক কলব্যাক সেট করতে পারেন বা প্রত্যেকের নিজস্ব কলব্যাক থাকতে দেওয়া এবং একবারে সমস্ত সম্পূর্ণ হয়ে গেলে:

বিজ্ঞপ্তি

যেহেতু jQuery 1.5+ আপনি অন্য উত্তরে বর্ণিত হিসাবে মুলতুবি পদ্ধতি ব্যবহার করতে পারেন:

  $.when($.ajax(), [...]).then(function(results){},[...]);

এখানে পিছিয়ে দেওয়া উদাহরণ

jQuery জন্য <1.5 নীচের কাজ করবে বা আপনার অজ্যাক্স কলগুলি অজানা সময়ে ফায়ার করতে হবে এখানে দুটি বোতামের সাহায্যে দেখানো হয়েছে: উভয় বোতাম ক্লিক করার পরে ফায়ার করা হয়েছে

[ব্যবহার]

একবার সম্পূর্ণ হয়ে গেলে একক কলব্যাকের জন্য : কার্যকারী উদাহরণ

// initialize here
var requestCallback = new MyRequestsCompleted({
    numRequest: 3,
    singleCallback: function(){
        alert( "I'm the callback");
    }
});

//usage in request
$.ajax({
    url: '/echo/html/',
    success: function(data) {
        requestCallback.requestComplete(true);
    }
});
$.ajax({
    url: '/echo/html/',
    success: function(data) {
        requestCallback.requestComplete(true);
    }
});
$.ajax({
    url: '/echo/html/',
    success: function(data) {
        requestCallback.requestComplete(true);
    }
});

সমস্ত সম্পূর্ণ হয়ে গেলে প্রত্যেকের নিজস্ব কলব্যাক রয়েছে: কার্যকারী উদাহরণ

//initialize 
var requestCallback = new MyRequestsCompleted({
    numRequest: 3
});

//usage in request
$.ajax({
    url: '/echo/html/',
    success: function(data) {
        requestCallback.addCallbackToQueue(true, function() {
            alert('Im the first callback');
        });
    }
});
$.ajax({
    url: '/echo/html/',
    success: function(data) {
        requestCallback.addCallbackToQueue(true, function() {
            alert('Im the second callback');
        });
    }
});
$.ajax({
    url: '/echo/html/',
    success: function(data) {
        requestCallback.addCallbackToQueue(true, function() {
            alert('Im the third callback');
        });
    }
});

[কোড]

var MyRequestsCompleted = (function() {
    var numRequestToComplete, requestsCompleted, callBacks, singleCallBack;

    return function(options) {
        if (!options) options = {};

        numRequestToComplete = options.numRequest || 0;
        requestsCompleted = options.requestsCompleted || 0;
        callBacks = [];
        var fireCallbacks = function() {
            alert("we're all complete");
            for (var i = 0; i < callBacks.length; i++) callBacks[i]();
        };
        if (options.singleCallback) callBacks.push(options.singleCallback);

        this.addCallbackToQueue = function(isComplete, callback) {
            if (isComplete) requestsCompleted++;
            if (callback) callBacks.push(callback);
            if (requestsCompleted == numRequestToComplete) fireCallbacks();
        };
        this.requestComplete = function(isComplete) {
            if (isComplete) requestsCompleted++;
            if (requestsCompleted == numRequestToComplete) fireCallbacks();
        };
        this.setCallback = function(callback) {
            callBacks.push(callBack);
        };
    };
})();

1
দুর্দান্ত কোড উদাহরণের জন্য ধন্যবাদ! আমি মনে করি আমি বাকী হয়ে আমার পথে হোঁচট খেতে পারব। আবার ধন্যবাদ!
মিস্টারআইসাক

কোন সমস্যা নেই, খুশি এটি সাহায্য করেছে! আমি এটিকে দূরে সরিয়ে নিয়েছি: পি এর জন্য আরও কিছু ধারণা রয়েছে। আমি এটি আপডেট করার পরিকল্পনা করছি যেখানে আপনাকে আরম্ভের ক্ষেত্রে বেশ কয়েকটি অনুরোধ নির্দিষ্ট করতে হবে না।
সাবহেজ করুন

ভাল লাগল, আমি আশা করি তুমি কর! খুব আকর্ষণীয়, আমি অতিরিক্ত কলব্যাক যোগ করার বিকল্পটিতে নিক্ষেপ করার পরামর্শ দেব। আমি করেছি এবং আমি যা করতে চাই তা এটি নিখুঁতভাবে কাজ করে। আবার ধন্যবাদ!
মিস্টারআইসাক

আমি এটি করেছি তবে ব্যবহারের ক্ষেত্রে এটিকে যুক্ত করতে ভুলে গেছি: সারিটিতে setCallbackআরও যুক্ত করতে পি ব্যবহার করুন। যদিও এখন আমি এটি সম্পর্কে চিন্তা করি ... আমার এটি কল করা উচিত addCallbackবা কিছু সাজানো ... এবং এটি
সারিটিতে

singleCallback২ য় লাইনে পরিবর্তনশীল কি অপ্রয়োজনীয়? নাকি আমি কিছু মিস করছি?
নিমক্যাপ

158

দেখে মনে হচ্ছে আপনি এর কিছু উত্তর পেয়েছেন তবে আমি মনে করি এখানে উল্লেখ করার মতো এমন কিছু আছে যা আপনার কোডকে খুব সহজ করবে। jQuery $.whenv1.5 এ উপস্থাপন করেছে । এটা দেখতে অনেকটা:

$.when($.ajax(...), $.ajax(...)).then(function (resp1, resp2) {
    //this callback will be fired once all ajax calls have finished.
});

এটি এখানে উল্লেখ করা হয়নি, আশা করি এটি সাহায্য করবে helps


6
উত্তরের জন্য ধন্যবাদ, এটি অবশ্যই আমার পক্ষে যাওয়ার উপায়। এটি jQuery ব্যবহার করে, এটি কমপ্যাক্ট, সংক্ষিপ্ত এবং ভাবপূর্ণ।
নিমক্যাপ

2
সুভাজের উত্তর দুর্দান্ত তবে সত্য, এটি সঠিক।
মোলম্বি

9
আমি সম্মতি জানাই যখন আপনি jQuery 1.5++ থাকবেন তবে উত্তরের সময় পেছানো কার্যকারিতা উপলব্ধ ছিল না this :(
সাবহ্যাজ করুন

13

নিজে কোনও বস্তুর প্রয়োজন দেখছেন না। সাধারণের একটি ভেরিয়েবল থাকে যা একটি পূর্ণসংখ্যা। আপনি যখন একটি অনুরোধ শুরু করবেন, সংখ্যাটি বৃদ্ধি করুন। যখন একটি সম্পূর্ণ হয়, এটি হ্রাস করুন। যখন এটি শূন্য হয়, অগ্রগতিতে কোনও অনুরোধ নেই, তাই আপনি হয়ে গেছেন।

$('#button').click(function() {
    var inProgress = 0;

    function handleBefore() {
        inProgress++;
    };

    function handleComplete() {
        if (!--inProgress) {
            // do what's in here when all requests have completed.
        }
    };

    $.ajax({
        beforeSend: handleBefore,
        complete: function () {
            // whatever
            handleComplete();
            // whatever
        }
    });
    $.ajax({
        beforeSend: handleBefore,
        complete: function () {
            // whatever
            handleComplete();
            // whatever
        }
    });
    $.ajax({
        beforeSend: handleBefore,
        complete: function () {
            // whatever
            handleComplete();
            // whatever
        }
    });
});

এটি খুব সহজ এবং পুরোপুরিভাবে কাজ করে ... যদি (--inProgress) হয় তবে কি ঘটে যায় তা আরও কিছুটা ভাল করে বোঝাতে আপনার মনে হবে? এটি প্রোগ্রিজ == 0 এ চলক হলে এটি নিয়ন্ত্রণ করতে হবে এবং এতে একটি ইউনিট বিয়োগ করতে হবে তবে আমি কমপ্যাক্ট সিনট্যাক্সটি পাই না ...
পিট্টো

1
@ পিট্টো: ওফস ... আসলে, সেখানে একটি যুক্তি ত্রুটি আছে, এবং এটি হওয়া উচিত if (!--inProgress)। সঠিক সংস্করণটি সাদৃশ্যপূর্ণ inProgress = inProgress - 1; if (inProgress == 0) { /* do stuff */ }। কমপ্যাক্ট ফর্মটি প্রিফিক্স হ্রাস অপারেটর ( --) এবং নেগেটিশন অপারেটর ( ) এবং "নিখরচালক অপারেটর !" কে একত্রিত করে ifযদি inProgressফল হ্রাস inProgress == 0হয় এবং অন্যথায় "মিথ্যা" (এবং তাই কিছুই করেন না) তে মূল্যায়ন করে।
ম্যাট

সহজভাবে বিস্মৃত! আপনার সময় এবং ধৈর্য জন্য ধন্যবাদ।
পিট্টো

@ পিট্টো: হুম .. আপনি যে কোডটি ব্যবহার করছেন তা কি লিঙ্ক করতে পারবেন? এটা আমার জন্য কাজ করে
ম্যাট

10

এটি লক্ষণীয় যে যেহেতু $.whenসমস্ত অ্যাজাক্স অনুরোধগুলি ক্রমযুক্ত আর্গুমেন্ট হিসাবে (একটি অ্যারে নয়) হিসাবে প্রত্যাশা করে আপনি সাধারণত এর মতো $.whenব্যবহার করতে দেখবেন .apply():

// Save all requests in an array of jqXHR objects
var requests = arrayOfThings.map(function(thing) {
    return $.ajax({
        method: 'GET',
        url: 'thing/' + thing.id
    });
});
$.when.apply(this, requests).then(function(resp1, resp2/*, ... */) {
    // Each argument is an array with the following structure: [ data, statusText, jqXHR ]
    var responseArgsArray = Array.prototype.slice.call(this, arguments);

});

এটি কারণ যেমন $.whenআরগ গ্রহণ করে

$.when(ajaxRequest1, ajaxRequest2, ajaxRequest3);

এবং এটির মতো নয়:

$.when([ajaxRequest1, ajaxRequest2, ajaxRequest3]);

দুর্দান্ত সাড়া। এখন অনেক ভাল প্রতিশ্রুতিবদ্ধ libs আছে, তাদের বেশিরভাগের একটি allপদ্ধতি বা অনুরূপ কিছু রয়েছে তবে আমি মানচিত্রের ধারণাটি পছন্দ করি like খুশী হলাম।
গ্রেগ

2
হ্যাঁ আমি প্রায় সর্বদা $। যখন এটিতে অনুরোধের একটি অ্যারে প্রয়োগ করে, এবং এটি এখানে কোনও সমাধানে সন্ধান করে না, তাই এটি এখানে একটি ভাল উদাহরণ হিসাবে যুক্ত করেছি।
কোরি ড্যানিয়েলসন

4

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

var sync = {
 callbacksToComplete = 3,
 callbacksCompleted = 0,
 addCallbackInstance = function(){
  this.callbacksCompleted++;
  if(callbacksCompleted == callbacksToComplete) {
   doFinalCallBack();
  }
 }
};

[নাম আপডেট প্রতিফলিত করতে সম্পাদিত।]


^ সম্মত হয়েছে, আমার আসলে কী প্রয়োজন তা আরও ভালভাবে বুঝতে সহায়তা করেছে।
মিস্টারআইসাক

3

সম্পাদনা - সম্ভবত সর্বোত্তম বিকল্পটি হ'ল একটি পরিষেবা শেষ পয়েন্ট তৈরি করা যা তিনটি অনুরোধ যা করে তা করে। এইভাবে আপনাকে কেবল একটি অনুরোধ করতে হবে এবং সমস্ত ডেটা হ'ল প্রতিক্রিয়াতে আপনার এটির দরকার। যদি আপনি দেখতে পান যে আপনি একই 3 বার বার অনুরোধ করছেন তবে আপনি সম্ভবত এই পথে যেতে চাইবেন। সার্ভারে একটি ফেইসড সার্ভিস স্থাপন করা প্রায়শই ভাল ডিজাইনের সিদ্ধান্ত যা সাধারণত ছোট সার্ভার ক্রিয়াগুলি একসাথে ব্যবহার করে। শুধু একটি ধারণা।


এটি করার এক উপায় হ'ল এজ্যাক্স কলের আগে আপনার ক্লিক হ্যান্ডলারে একটি 'সিঙ্ক' অবজেক্ট তৈরি করা। কিছুটা এইরকম

var sync = {
   count: 0
}

সিঙ্কটি স্বয়ংক্রিয়ভাবে কল (কলস) কল করার সুযোগে আবদ্ধ থাকবে। সাফল্য হ্যান্ডলারে, আপনি গণনা বৃদ্ধি করেন এবং এটি 3 হয় তবে আপনি অন্য ফাংশনটিতে কল করতে পারেন।

বিকল্পভাবে, আপনি যেমন কিছু করতে পারে

var sync = {
   success1Complete: false,
   ...
   success3Complete: false,
}

যখন প্রতিটি সাফল্য কার্যকর হয়, এটি সিঙ্কের মানটিকে সত্যে বদলে দেবে। এগিয়ে যাওয়ার আগে আপনার তিনটিই সত্য কিনা তা নিশ্চিত করতে আপনাকে সিঙ্কটি পরীক্ষা করে দেখতে হবে।

আপনার xhrs এর কোনওটি সাফল্য ফেরায় না এমন ক্ষেত্রে নোট করুন - আপনাকে তার জন্য অ্যাকাউন্টিং করতে হবে।

তবুও অন্য একটি বিকল্প হ'ল সর্বদা আপনার সাফল্য হ্যান্ডলারের মধ্যে চূড়ান্ত ফাংশনটি কল করা এবং আসলে কিছু করা যায় কিনা তা নির্ধারণ করার জন্য এটি সিঙ্ক বিকল্পটি অ্যাক্সেস করে। আপনার সিঙ্কটি সেই ফাংশনের সুযোগের মধ্যে রয়েছে কিনা তা নিশ্চিত করতে হবে।


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

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


0

আমি এই পৃষ্ঠায় উত্তর থেকে কিছু ভাল ইঙ্গিত পেয়েছি। আমি এটি আমার ব্যবহারের জন্য কিছুটা মানিয়ে নিয়েছি এবং ভাবেন যে আমি ভাগ করতে পারি।

// lets say we have 2 ajax functions that needs to be "synchronized". 
// In other words, we want to know when both are completed.
function foo1(callback) {
    $.ajax({
        url: '/echo/html/',
        success: function(data) {
            alert('foo1');
            callback();               
        }
    });
}

function foo2(callback) {
    $.ajax({
        url: '/echo/html/',
        success: function(data) {
            alert('foo2');
            callback();
        }
    });
}

// here is my simplified solution
ajaxSynchronizer = function() {
    var funcs = [];
    var funcsCompleted = 0;
    var callback;

    this.add = function(f) {
        funcs.push(f);
    }

    this.synchronizer = function() {
        funcsCompleted++;
        if (funcsCompleted == funcs.length) {
            callback.call(this);
        }
    }

    this.callWhenFinished = function(cb) {
        callback = cb;
        for (var i = 0; i < funcs.length; i++) {
            funcs[i].call(this, this.synchronizer);
        }
    }
}

// this is the function that is called when both ajax calls are completed.
afterFunction = function() {
    alert('All done!');
}

// this is how you set it up
var synchronizer = new ajaxSynchronizer();
synchronizer.add(foo1);
synchronizer.add(foo2);
synchronizer.callWhenFinished(afterFunction);

এখানে কিছু সীমাবদ্ধতা আছে, তবে আমার ক্ষেত্রে এটি ঠিক ছিল। আমি আরও দেখতে পেলাম যে আরও উন্নত স্টাফের জন্য এটিও একটি এওপি প্লাগইন রয়েছে (jQuery এর জন্য) দরকারী হতে পারে: http://code.google.com/p/jquery-aop/


0

আমি আজ এই সমস্যাটি পেরিয়ে এসেছি এবং গ্রহণযোগ্য উত্তর দেখার আগে এটি ছিল আমার নির্বোধ প্রচেষ্টা।

<script>
    function main() {
        var a, b, c
        var one = function() {
            if ( a != undefined  && b != undefined && c != undefined ) {
                alert("Ok")
            } else {
                alert( "¬¬ ")
            }
        }

        fakeAjaxCall( function() {
            a = "two"
            one()
        } )
        fakeAjaxCall( function() {
            b = "three"
            one()
        } )
        fakeAjaxCall( function() {
            c = "four"
            one()
        } )
    }
    function fakeAjaxCall( a ) {
        a()
    }
    main()
</script>

0

এটি jquery নয় (এবং এটি jquery একটি কার্যকর সমাধান আছে বলে মনে হয়) তবে ঠিক অন্য বিকল্প হিসাবে ....

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

এটির সমাধানের জন্য আমি আমার এজেএক্স বিমূর্ত গ্রন্থাগারে এই জাতীয় কার্যকারিতা এম্বেড করেছি। আপনি সহজেই একটি অনুরোধ সংজ্ঞায়িত করতে পারেন যা সম্পূর্ণ হওয়ার পরে হ্যান্ডলারের একটি সেট ট্রিগার করবে। তবে প্রতিটি অনুরোধ একাধিক HTTP কল দিয়ে সংজ্ঞায়িত করা যেতে পারে। এখানে উপাদান (এবং বিস্তারিত ডকুমেন্টেশন):

ডিপ্রেস.কম এ ডিপিএজেএক্স

এই সাধারণ উদাহরণটি তিনটি কল দিয়ে একটি অনুরোধ তৈরি করে এবং তারপরে সেই তথ্যটি কল অর্ডারে একক হ্যান্ডলারের কাছে পৌঁছে দেয়:

    // The handler function 
function AddUp(Nums) { alert(Nums[1] + Nums[2] + Nums[3]) }; 

    // Create the pool 
myPool = DP_AJAX.createPool(); 

    // Create the request 
myRequest = DP_AJAX.createRequest(AddUp); 

    // Add the calls to the request 
myRequest.addCall("GET", "http://www.mysite.com/Add.htm", [5,10]); 
myRequest.addCall("GET", "http://www.mysite.com/Add.htm", [4,6]); 
myRequest.addCall("GET", "http://www.mysite.com/Add.htm", [7,13]); 

    // Add the request to the pool 
myPool.addRequest(myRequest); 

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

আমি এটি অত্যন্ত অপরিহার্যভাবে দরকারী (এবং একটি কোড দৃষ্টিকোণ থেকে বুঝতে অবিশ্বাস্য সহজ) খুঁজে পেয়েছি। আর কোনও শৃঙ্খলা নেই, আর কলিং গণনা এবং আউটপুট সংরক্ষণ করা হবে না। কেবল "এটি সেট করুন এবং এটি ভুলে যান"।


0

ঠিক আছে, এটি পুরানো তবে দয়া করে আমাকে আমার সমাধানে অবদান রাখুন :)

function sync( callback ){
    syncCount--;
    if ( syncCount < 1 ) callback();
}
function allFinished(){ .............. }

window.syncCount = 2;

$.ajax({
    url: 'url',
    success: function(data) {
        sync( allFinished );
    }
});
someFunctionWithCallback( function(){ sync( allFinished ); } )

এটি কলব্যাক রয়েছে এমন ফাংশনগুলির সাথেও কাজ করে। আপনি সিঙ্ককাউন্টটি সেট করেছেন এবং আপনি প্রতিটি ক্রিয়াকলাপের কলব্যাকে ফাংশন সিঙ্ক (...) কল করেছেন।


0

আমি একটি কাতারের ব্যবস্থা করে এমন অতিরিক্ত পদ্ধতির প্রয়োজন ছাড়াই এটি করার একটি সহজ উপায় পেয়েছি।

জাতীয়

$.ajax({
  type: 'POST',
  url: 'ajax1.php',
  data:{
    id: 1,
    cb:'method1'//declaration of callback method of ajax1.php
  },
  success: function(data){
  //catching up values
  var data = JSON.parse(data);
  var cb=data[0].cb;//here whe catching up the callback 'method1'
  eval(cb+"(JSON.stringify(data));");//here we calling method1 and pass all data
  }
});


$.ajax({
  type: 'POST',
  url: 'ajax2.php',
  data:{
    id: 2,
    cb:'method2'//declaration of callback method of ajax2.php
  },
  success: function(data){
  //catching up values
  var data = JSON.parse(data);
  var cb=data[0].cb;//here whe catching up the callback 'method2'
  eval(cb+"(JSON.stringify(data));");//here we calling method2 and pass all data
  }
});


//the callback methods
function method1(data){
//here we have our data from ajax1.php
alert("method1 called with data="+data);
//doing stuff we would only do in method1
//..
}

function method2(data){
//here we have our data from ajax2.php
alert("method2 called with data="+data);
//doing stuff we would only do in method2
//..
}

পিএইচপি (ajax1.php)

<?php
    //catch up callbackmethod
    $cb=$_POST['cb'];//is 'method1'

    $json[] = array(
    "cb" => $cb,
    "value" => "ajax1"
    );      

    //encoding array in JSON format
    echo json_encode($json);
?>

পিএইচপি (ajax2.php)

<?php
    //catch up callbackmethod
    $cb=$_POST['cb'];//is 'method2'

    $json[] = array(
    "cb" => $cb,
    "value" => "ajax2"
    );      

    //encoding array in JSON format
    echo json_encode($json);
?>

-1
async   : false,

ডিফল্টরূপে, সমস্ত অনুরোধগুলি অবিচ্ছিন্নভাবে প্রেরণ করা হয় (যেমন এটি ডিফল্টরূপে সত্য হয়ে থাকে)। আপনার যদি সিঙ্ক্রোনাস অনুরোধগুলির প্রয়োজন হয় তবে এই বিকল্পটি এতে সেট করুন false। ক্রস-ডোমেন অনুরোধ এবং dataType: "jsonp"অনুরোধগুলি সিঙ্ক্রোনাস অপারেশনকে সমর্থন করে না। নোট করুন যে সিঙ্ক্রোনাস অনুরোধগুলি অস্থায়ীভাবে ব্রাউজারটিকে লক করতে পারে, অনুরোধটি সক্রিয় থাকাকালীন কোনও ক্রিয়া অক্ষম করে। JQuery 1.8 হিসাবে, jqXHR ( ) এর async: falseসাথে ব্যবহার অবচিত করা হয়েছে; আপনার অবশ্যই সাফল্য / ত্রুটি / সম্পূর্ণ কলব্যাক বিকল্পগুলি ব্যবহার করতে হবে jqXHR অবজেক্টের সম্পর্কিত পদ্ধতির পরিবর্তে বা অবচিত হিসাবে পরিবর্তিত$.DeferredjqXHR.done()jqXHR.success()


এটি পর্যাপ্ত সমাধান নয়। আপনার কখনই সিঙ্ক্রোনাস অ্যাজাক্স অনুরোধ করা উচিত নয়।
ব্যবহারকারী 128216

-2
$.ajax({type:'POST', url:'www.naver.com', dataType:'text', async:false,
    complete:function(xhr, textStatus){},
    error:function(xhr, textStatus){},
    success:function( data ){
        $.ajax({type:'POST', 
            ....
            ....
            success:function(data){
                $.ajax({type:'POST',
                    ....
                    ....
            }
        }
    });

আমি দুঃখিত, কিন্তু আমি কী জানতাম তা আমি ব্যাখ্যা করতে পারি না আমি এমন এক কোরিয়ান যারা ইংরেজিতে এমনকি একটি শব্দও বলতে পারে না। তবে আমি মনে করি আপনি এটি সহজেই বুঝতে পারবেন।


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