আজাক্স সাফল্যের ইভেন্টটি কাজ করছে না


193

আমার একটি নিবন্ধকরণ ফর্ম আছে এবং $.ajaxএটি জমা দেওয়ার জন্য ব্যবহার করছি ।

এটি আমার এজেএক্স অনুরোধ:

$(document).ready(function() {
    $("form#regist").submit(function() {
        var str = $("#regist").serialize();
        $.ajax({
            type: 'POST',
            url: 'submit1.php',
            data: $("#regist").serialize(),
            dataType: 'json',
            success: function() {
                $("#loading").append("<h2>you are here</h2>");
            }        
        });
        return false;        
    });
});

আমার সাবমিট 1.এফপি ফাইলে আমি ডেটাবেজে ক্ষেত্রের ইমেল ঠিকানা এবং ব্যবহারকারীর নামটির অস্তিত্ব পরীক্ষা করি । পৃষ্ঠাগুলি রিফ্রেশ ছাড়াই যদি মানগুলি উপস্থিত থাকে তবে আমি একটি ত্রুটি বার্তা প্রদর্শন করতে চাই ।

আমি কীভাবে এটি আমার এজেএক্স অনুরোধটির সাফল্যের কলব্যাকে যুক্ত করতে পারি ?


2
আপনি কি নিশ্চিত যে সাফল্য কলব্যাক চালু আছে?
রাহুল

আপনার দ্বিতীয় সমস্যার জন্য আপনাকে একটি নতুন প্রশ্ন জিজ্ঞাসা করতে হবে।
মাইক লিয়নস

উত্তর:


386

ফলাফল সম্ভবত জেএসএন ফর্ম্যাটে নেই, সুতরাং যখন jQuery এটিকে পার্স করার চেষ্টা করে, ব্যর্থ হয়। আপনি error:কলব্যাক ফাংশন সহ ত্রুটিটি ধরতে পারেন ।

আপনার কোনওভাবেই এই ফাংশনে JSON এর দরকার নেই বলে মনে হচ্ছে, যাতে আপনি সারিটিও বের করতে পারেন dataType: 'json'


14
আমি ডেটা টাইপটিকে পাঠ্যে পরিবর্তন করেছি এবং এটি কাজ করে চলেছি। dataType:'text'
এটির

+1 এমনকি আমার, কিন্তু কোডটি আমার নয়, আমি সার্ভার থেকে
জসন

4
dataType:নির্দিষ্ট করে না থাকলেও url:শেষ হতে পারে এটিও ঘটতে পারে .json
ডেভেটপ্লে

1
মধ্যে এছাড়াও $.postসরবরাহ ওরফে jsonপ্রকৃত JSON সার্ভার থেকে আসছে ছাড়া ডাটা টাইপ হিসেবে নয় ট্রিগার করে successকলব্যাক
baldrs

আপনি যদি কোনও জসন এজাক্স অনুরোধ করতে চান তবে নিশ্চিত হন যে এটি মাইম-টাইপটি অ্যাপ্লিকেশন / জসন-তে সেট করা আছে। এটি আমাকে কিছু ঝামেলা দিয়েছে।
জেলওয়েলার

19

যদিও সমস্যাটি ইতিমধ্যে সমাধান হয়েছে আমি এটি এই আশ্বাসে যুক্ত করছি এটি অন্যদের সহায়তা করবে।

আমি ভুলটি একটি ফাংশন সরাসরি এর মতো ব্যবহার করার চেষ্টা করেছি (সাফল্য: অনসুকসেস (প্রোডাক্টআইডি))। তবে আপনাকে প্রথমে একটি বেনামী ফাংশনটি পাস করতে হবে:

  function callWebService(cartObject) {

    $.ajax({
      type: "POST",
      url: "http://localhost/AspNetWebService.asmx/YourMethodName",
      data: cartObject,
      contentType: "application/x-www-form-urlencoded",
      dataType: "html",
      success: function () {
        OnSuccess(cartObject.productID)
      },
      error: function () {
        OnError(cartObject.productID)
      },
      complete: function () {
        // Handle the complete event
        alert("ajax completed " + cartObject.productID);
      }
    });  // end Ajax        
    return false;
  }

আপনি যদি একটি বেনামি ফাংশনটিকে একটি মোড়ক হিসাবে ব্যবহার না করেন তবে অনসুক্সেসকে কল করা হয় এমনকি যদি ওয়েব সার্ভিস একটি ব্যতিক্রম ফিরিয়ে দেয়।


5
এজ্যাক্স, জ্যাকোয়ারি, বা হ্যান্ডলারের সাথে এটির কোনও সম্পর্ক নেই। "পুরো কোডটি অবশ্যই একটি স্ক্রিপ্ট ট্যাগের মধ্যে জড়িয়ে দেওয়া হবে" এমন একটি স্মরণ করিয়ে দেওয়ার মতো একটি মন্তব্য আমরা দিতে পারি। ব্যাখ্যাটি মিথ্যা: আপনাকে বেনাম ফাংশনগুলিতে কোনও কিছু মুড়ে রাখতে হবে না, একটি নামযুক্ত ফাংশনটি করবে যতক্ষণ আপনি এটি কল করার পরিবর্তে এটি পাস করেন। তদ্ব্যতীত এটি বিভ্রান্তিকর: অনুরোধটি প্রেরণের আগেই অনস্যাক্সেস কল হয়ে যায়, তাই এটি কোনও কিছু ফেরত দেওয়ার জন্য ওয়েবসার্ভিসের সাথে সম্পর্কিত হওয়ার কোনও মানে হয় না।
fdreger

এই উত্তরটি আমাকে সহায়তা করেছিল, তবে আমি আপত্তি জানাইনি, আপনার @fdreger মন্তব্য অনুসারে আপনার উত্তরটি আপডেট করা উচিত।
ওজায়ার কাফরে

15

আমি ডেটা টাইপ সারিটি সরিয়ে দেওয়ার চেষ্টা করেছি এবং এটি আমার পক্ষে কার্যকর হয়নি। আমি কলব্যাক হিসাবে "সাফল্য" পরিবর্তে "সম্পূর্ণ" ব্যবহার করে ইস্যুটি প্রায় কাছাকাছি পেয়েছি। সাফল্য কলব্যাক এখনও IE এ ব্যর্থ হয়, তবে যেহেতু আমার স্ক্রিপ্টটি চালিত হয় এবং যাইহোক এটি সম্পূর্ণ হয় তবে আমি সেদিকেই যত্ন করি।

$.ajax({
    type: 'POST',
    url: 'somescript.php',
    data: someData,
    complete: function(jqXHR) {
       if(jqXHR.readyState === 4) {
          ... run some code ... 
       }   
    }        
 });

jQuery 1.5 এ আপনি এটিও এটি করতে পারেন।

var ajax = $.ajax({
    type: 'POST',
    url: 'somescript.php',
    data: 'someData'
});
ajax.complete(function(jqXHR){
    if(jqXHR.readyState === 4) {
        ... run some code ... 
    }
});

9
এটি একটি নোট। ওয়েব সার্ভারটি এইচটিটিপি শিরোনাম (সমস্ত কিছু ঠিক আছে) দিয়ে প্রতিক্রিয়া completeজানালে অজাক্স কল সফল হয়েছিল বা না থাকলে successকেবল কল করা হবে always 200 OK
katalin_2003

10

আপনার PHP ফাইলে আপনার JSON ফর্ম্যাট ডেটা তৈরি করার আগে আপনি কোনও পাঠ্য / ডেটা মুদ্রণ (প্রতিধ্বনি বা মুদ্রণ) করছেন না তা নিশ্চিত করুন। এটি আপনাকে ব্যাখ্যা করতে পারে যে আপনি একটি 200 সেকেন্ডস পেয়েছেন ঠিক আছে but তবে আপনার সাসস ইভেন্টটি আপনার জাভাস্ক্রিপ্টে এখনও ব্যর্থ। আপনার স্ক্রিপ্টটি পোস্টটি সাবমিট 1. পিএফপি জন্য ফায়ারবগে "নেটওয়ার্ক - উত্তর" বিভাগটি পরীক্ষা করে যাচাই করতে পারে।


এটি সত্যিই আমাকে সাহায্য করেছে। আমি জানি এটি একটি পুরানো উত্তর তবে এটি যে সমস্যাটি করছিলাম তা ছিল বহিরাগতভাবে। ডিবাগিংয়ের সময় প্রতিধ্বনি বা মুদ্রণ_আর ব্যবহার করে এবং এটিগুলি আসলে বাগের কারণ হতে পারে তা খুঁজে বের করে ... :) ধন্যবাদ!
lennyklb

6 বছর পরে এবং এখনও এই উত্তরটি দিয়ে লোকদের সাহায্য করছে! অন্যথায় কোথায় দেখতে হবে তা আমি জানতাম না।
তানিয়া রাসিয়া

5

একে একে বলা হচ্ছে তা নিশ্চিত করার জন্য alert()আপনার successকলব্যাকটিতে একটি রাখুন ।

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

ফায়ারফক্সের জন্য ফায়ারব্যাগ অ্যাডন ইনস্টল করুন, যদি আপনি ইতিমধ্যে না করে থাকেন এবং এজেএক্স কলব্যাকটি পরীক্ষা করেন। আপনি প্রতিক্রিয়া দেখতে সক্ষম হবেন এবং এটি একটি সফল (২০০ ওকে) প্রতিক্রিয়া পাবে কিনা। আপনি হয়ত অন্য লাগাতে পারেন alert()মধ্যে complete কলব্যাক, যা স্পষ্টভাবে প্রার্থনা করা উচিত।


আপনার উত্তর দেওয়ার জন্য ধন্যবাদ. সাফল্যের ইভেন্টে সতর্কতার চেষ্টা করা হলেও এটি কার্যকর হয়নি। আমার ফায়ারফক্সের জন্য ফায়ারবগ অ্যাডন রয়েছে এবং এটি একটি সফল (২০০২ ওকে) সাড়া পেয়েছে তাই এতে কোনও সমস্যা নেই any আমার পিএইচপি ফাইলে কোনও ত্রুটির জন্য ডাই ফাংশন রয়েছে এবং আমি ফায়ারবগে এটি যাচাই করলে এটি সঠিক প্রতিক্রিয়া দেখায়। "আপনি সম্পূর্ণ কলব্যাকে আরও একটি সতর্কতা ()ও রাখতে পারেন, যা অবশ্যই বলা উচিত" "?? তাত্ক্ষণিক জবাবের জন্য অনেক ধন্যবাদ
codingbbq

2
যদি আপনি নিজের মধ্যে সতর্কতা না দেখেন successতবে এটি সফলতা নয়। যেহেতু প্রতিক্রিয়া 200 টি ঠিক আছে, তাতুর জবাব যুক্তিসঙ্গত বলে মনে হয় তবে আরও সমস্যার সমাধানের জন্য, আপনি completeএকটি অনুরোধ সফল কিনা তা না করেই সর্বদা আহ্বান করা হয় এমন একটি ইভেন্ট ব্যবহার করতে পারেন ( successকেবল অনুরোধটি সফল হলেই ঘটে)। complete: function (xhr, status) { alert('complete: '+status); }
ডেভিড হেডলুন্ড

3

আমারও একই সমস্যা ছিল এটি ঘটবে কারণ javascriptপ্রত্যাশিত jsonডেটাতে ডেটা টাইপ আশা করে। তবে আপনি যদি আপনার পিএইচপি তে প্রতিধ্বনি বা মুদ্রণ ব্যবহার করেন তবে এই পরিস্থিতি দেখা দেয়। আপনি যদি ডেটা ফেরত দেওয়ার জন্য echoফাংশনটি ব্যবহার করেন php, কেবল dataType : "json"খুব ভালভাবে কাজ সরিয়ে ফেলুন ।


2

আমি আমার "সম্পূর্ণ" কলব্যাকে 200 এর প্রতিক্রিয়া পেয়ে বৈধ জেএসনকে ফিরছিলাম, এবং এটি ক্রোম নেটওয়ার্ক কনসোলে দেখতে পেলাম ... তবে আমি নির্দিষ্ট করেছিলাম না

dataType: "json"

একবার আমি "গ্রহণযোগ্য উত্তর" এর বিপরীতে করেছি, যা আসলে সমস্যাটি স্থির করেছে।


1

আমি সার্ভারের পিএইচপি থেকে ওয়েবপৃষ্ঠায় ফলাফলটি ফিরিয়ে আনতে এক্সএমএল ব্যবহার করছি এবং আমারও একই আচরণ ছিল।

আমার ক্ষেত্রে কারণটি ছিল, ক্লোজিং ট্যাগটি খোলার ট্যাগটির সাথে মেলে না।

<?php
....
header("Content-Type: text/xml");
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>
    <result>
        <status>$status</status>
        <OPENING_TAG>$message</CLOSING_TAG>
    </result>";
?>

1

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

  1. জেএসওএন ফর্ম্যাটে ফলাফলটি ফেরানো হচ্ছে না
  2. আমি একটি অ্যারেটিকে JSON ফর্ম্যাটে রূপান্তর করার চেষ্টা করছিলাম, তবে এই অ্যারেটিতে অ-উটফ অক্ষর ছিল

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


1

আমি কন্ট্রোলার থেকে স্ট্রিং ফেরত দেওয়ার চেষ্টা করেছি তবে কেন এজ্যাক্সের সাফল্যে নিয়ন্ত্রণ ত্রুটি ব্লকে ফিরে আসেনি

var sownum="aa";
$.ajax({
    type : "POST",
    contentType : 'application/json; charset=utf-8',
    dataType : "JSON",
    url : 'updateSowDetails.html?sownum=' + sownum,
    success : function() {
        alert("Wrong username");
    },
    error : function(request, status, error) {

        var val = request.responseText;
        alert("error"+val);
    }
});

1

নিয়ামককে জিজ্ঞাসাবাদ করার সময় আমি একই সমস্যার মুখোমুখি হয়েছি যা সাফল্যের প্রতিক্রিয়া ফিরিয়ে দেয় না, যখন আমার নিয়ামককে সাফ করার জন্য সাফল্যের বার্তা সমস্যাটি সমাধান হয়েছিল তখন। লাভালাইট ফ্রেমওয়ার্ক ব্যবহার করে নোট করুন। আগে:

public function Activity($id)
    {
        $data=getData();
        return
            $this->response->title('title')
                ->layout('layout')
                ->data(compact('data'))
                ->view('view')
                ->output();
    }
after code looks like:
    try {
            $attributes = $request->all();
            //do something
            return $this->response->message('')
                ->code(204)
                ->status('success')
                ->url('url'. $data->id)
                ->redirect();
        } catch (Exception $e) {
            return $this->response->message($e->getMessage())
                ->code(400)
                ->status('error')
                ->url('nothing Wrong')
                ->redirect()
        }

এটি আমার জন্য কাজ করেছে


1

আমার একই সমস্যাটি আমি সেভাবে সমাধান করেছি: আমার এজাক্স:

event.preventDefault();
$.ajax('file.php', {
method: 'POST',
dataType: 'json',
contentType: 'application/json',
data: JSON.stringify({tab}), 
success: function(php_response){
            if (php_response == 'item') 
                {
                    console.log('it works');
                }
            }
        })

ঠিক আছে. সমস্যাটি জাসন নিয়ে নয় তবে কেবল পিএইচপি প্রতিক্রিয়া। আগে: আমার পিএইচপি প্রতিক্রিয়া ছিল:

echo 'item';

এখন:

$variable = 'item';
 echo json.encode($variable);

এখন আমার সাফল্য কাজ। পুনশ্চ. দুঃখিত যদি কিছু ভুল হয় তবে এটি এই ফোরামে আমার প্রথম মন্তব্য :)


0

আমার ক্ষেত্রে ত্রুটিটি এটি ছিল সার্ভার সাইডে এবং সেই কারণে এটি একটি এইচটিএমএল ফিরিয়ে দিচ্ছে

wp_nonce_field(basename(__FILE__), "mu-meta-box-nonce");

0

এইভাবে 'ত্রুটি' কলব্যাক যুক্ত করুন (ঠিক 'সাফল্যের মতো'):

$.ajax({
   type: 'POST',
   url: 'submit1.php',
   data: $("#regist").serialize(),
   dataType: 'json',
   success: function() {
      $("#loading").append("<h2>you are here</h2>");
   },
   error: function(jqXhr, textStatus, errorMessage){
      console.log("Error: ", errorMessage);
   }
});

সুতরাং, আমার ক্ষেত্রে আমি কনসোলে দেখেছি:

Error:  SyntaxError: Unexpected end of JSON input
  at parse (<anonymous>), ..., etc.

0

আপনাকে অবশ্যই সাফল্য এবং ত্রুটি কলব্যাক উভয়ই ঘোষণা করতে হবে। যোগ করার পদ্ধতি

error: function(err) {...} 

সমস্যা ঠিক করা উচিত


-4

সাফল্য কলব্যাক দুটি আর্গুমেন্ট লাগে:

success: function (data, textStatus) { }

এছাড়াও নিশ্চিত করুন যে submit1.phpসেটগুলি যথাযথ সামগ্রী-টাইপ শিরোনাম সেট করে:application/json


আপনার উত্তর দেওয়ার জন্য ধন্যবাদ. আমি jquery ajax ডকুমেন্টায়নে এটি সম্পর্কে পড়েছিলাম তবে এটি কাজ করার জন্য আমার পরবর্তী পদক্ষেপটি কী হওয়া উচিত তা আমি বুঝতে পারি না ... আপনি যদি আমাকে সঠিক দিকে নির্দেশ করতে পারেন তবে প্রশংসা করব। এছাড়াও এর অর্থ কি আমার পিএইচপি ফাইলটিতে কিছু নির্দিষ্ট কোড থাকা উচিত ?? অনেক অনেক ধন্যবাদ
কোডিংবিবিকিউ

7
successদুটি যুক্তি গ্রহণ করার বিষয়টি সত্যই প্রশ্নটির সাথে সম্পূর্ণ অপ্রাসঙ্গিক বলে মনে হয়। আপনি জাভাস্ক্রিপ্ট ফাংশনে যেকোন পরিমাণ প্যারামিটারগুলি পাসওয়ার্ড করতে পারেন, এটি তার ঘোষণায় কতটা গ্রহণ করে তা নির্বিশেষে এটি অবশ্যই এই সমস্যাগুলির কারণ নয় এবং যেহেতু মানগুলির কোনওটিই dataবা textStatusসাফল্যের কলব্যাকে ব্যবহৃত হচ্ছে না বলে মনে হয় এগুলি কার্যক্রমে এগুলি ঘোষণা করার কোনও ভাল কারণ হবেন না।
ডেভিড হেডলন্ড

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