অ্যাজাক্স অনুরোধ 200 টি ঠিক আছে, তবে সাফল্যের পরিবর্তে একটি ত্রুটি ইভেন্ট বরখাস্ত করা হয়েছে


805

আমি আমার ওয়েবসাইটে একটি অ্যাজাক্স অনুরোধটি প্রয়োগ করেছি এবং আমি ওয়েবপৃষ্ঠা থেকে শেষ পয়েন্টটি কল করছি। এটি সর্বদা 200 ঠিক আছে , কিন্তু jQuery ত্রুটি ইভেন্টটি কার্যকর করে।
আমি অনেক চেষ্টা করেছিলাম, কিন্তু সমস্যাটি বুঝতে পারি না। আমি আমার কোডটি নীচে যুক্ত করছি:

jQuery কোড

var row = "1";
var json = "{'TwitterId':'" + row + "'}";
$.ajax({
    type: 'POST',
    url: 'Jqueryoperation.aspx?Operation=DeleteRow',
    contentType: 'application/json; charset=utf-8',
    data: json,
    dataType: 'json',
    cache: false,
    success: AjaxSucceeded,
    error: AjaxFailed
});
function AjaxSucceeded(result) {
    alert("hello");
    alert(result.d);
}
function AjaxFailed(result) {
    alert("hello1");
    alert(result.status + ' ' + result.statusText);
}

সি # কোড এর জন্য JqueryOpeartion.aspx

protected void Page_Load(object sender, EventArgs e) {
    test();
}
private void test() {
    Response.Write("<script language='javascript'>alert('Record Deleted');</script>");
}

("Record deleted")সফল মোছার পরে আমার স্ট্রিংটি দরকার । আমি সামগ্রীটি মুছতে সক্ষম হয়েছি, তবে আমি এই বার্তাটি পাচ্ছি না। এটি সঠিক নাকি আমি কোনও ভুল করছি? এই সমস্যাটি সমাধানের সঠিক উপায় কী?


2
আপনি একটি JSON- যাচাইকারী মাধ্যমে JqueryOperation.aspx আউটপুট চালানো এবং এটি যদি বৈধ JSON দেখতে পারি
parapura রাজকুমার

1
Jsonlint.com এর মত । আপনার পাঠানো প্যারামিটারগুলিও আপনাকে পরীক্ষা করতে হবে। বর্তমানে আপনি কোনও প্যারামিটারের নাম সেট করেন নি। যদি প্যারামিটারটি হয় TwitterId, তবে আপনাকে dataকোনও স্ট্রিং নয়: কোনও বস্তুতে পাস করতে হবে data: {TwitterId: row}
ফেলিক্স ক্লিং

6
Jqueryoperation.aspx পৃষ্ঠাটি JSON ফেরত (বৈধ)?
সালমান এ

1
সম্ভবত আপনার সার্ভারের সাইড কোডটি একটি ব্যতিক্রম ছুঁড়ে দিচ্ছে .. প্রতিক্রিয়া হিসাবে আপনার ক্যাচ ব্লকে কী রি ফিরে আসছে?
রাঘব

3
@ রাঘব, যদি সার্ভারটি অনুরোধটি প্রক্রিয়াকরণ ব্যতিক্রম করে ফেলে, তবে এইচটিটিপি রিটার্ন কোডটি 500 হবে
স্টুপারউসার

উত্তর:


1118

jQuery.ajaxনির্দিষ্ট dataTypeপরামিতি বা Content-Typeসার্ভারের দ্বারা প্রেরিত শিরোনামের উপর নির্ভর করে প্রতিক্রিয়া বৌকে রূপান্তর করার চেষ্টা করে । যদি রূপান্তর ব্যর্থ হয় (যেমন, যদি JSON / XML অবৈধ থাকে), ত্রুটি কলব্যাকটি বরখাস্ত করা হয়।


আপনার এজেএক্স কোডটিতে রয়েছে:

dataType: "json"

এই ক্ষেত্রে jQuery:

প্রতিক্রিয়াটিকে JSON হিসাবে মূল্যায়ন করে এবং একটি জাভাস্ক্রিপ্ট অবজেক্ট প্রদান করে। […] JSON ডেটা কঠোরভাবে পার্স করা হয়েছে; যে কোনও ত্রুটিযুক্ত জেএসওএন প্রত্যাখ্যান করা হয় এবং একটি বিশ্লেষণ ত্রুটি নিক্ষেপ করা হয়। […] একটি খালি প্রতিক্রিয়াও প্রত্যাখ্যান করা হয়; সার্ভারের পরিবর্তে নাল বা {of এর প্রতিক্রিয়া ফিরিয়ে দেওয়া উচিত।

আপনার সার্ভার-সাইড কোডটি 200 OKস্থিতির সাথে এইচটিএমএল স্নিপেট দেয় । jQuery বৈধ JSON প্রত্যাশা করছিল এবং তাই ত্রুটি কলব্যাকের বিরুদ্ধে অভিযোগ করে parseerror

সমাধানটি হ'ল dataTypeআপনার jQuery কোড থেকে প্যারামিটারটি সরিয়ে সার্ভার-সাইড কোডটি রিটার্ন করা:

Content-Type: application/javascript

alert("Record Deleted");

তবে আমি বরং JSON প্রতিক্রিয়া ফিরিয়ে দেওয়ার এবং সাফল্য কলব্যাকের ভিতরে বার্তাটি প্রদর্শন করার পরামর্শ দিচ্ছি:

Content-Type: application/json

{"message": "Record deleted"}

1
আপনার প্রতিক্রিয়ার জন্য ধন্যবাদ আপনি দয়া করে আমাকে একটি জিনিস বলতে পারেন আমি কীভাবে পিছন কোড থেকে জসন মানটি ফিরিয়ে আনতে পারি। আমি সি # দিয়ে Asp.net ব্যবহার করছি। এটি আমার সমস্যার সমাধান করেছে তবে দয়া করে আমাকে এই বিষয়টিও জানাতে পারেন।
পঙ্কজ মিশ্র

1
@ পঙ্কজ: আপনি যদি এটি অন্য প্রশ্ন হিসাবে পোস্ট করেন তবে ভাল। তবে সংক্ষিপ্ত উত্তর: এটি করার দুটি উপায় (i) আপনার পরিবর্তে $.ajaxচেষ্টা করতে পারেন $.getScript। সার্ভারের পাশের সি # স্ক্রিপ্টটিতে সবেমাত্র alert('Record Deleted');(কোনও <script>ট্যাগ নেই) রাখুন এবং আপনার সি # স্ক্রিপ্টের কন্টেন্টটাইপ সেট করুন text/javascript$.ajaxএছাড়াও কাজ করতে পারে তবে আমি কীভাবে স্মরণ করতে পারি না, আপনার কেবল পরিবর্তন করার দরকার হতে পারে dataType: 'script',। আপনার আর সাফল্য হ্যান্ডলারের প্রয়োজন নেই।
সালমান এ

3
এই উত্তরটি সম্পূর্ণ নাও হতে পারে। ঠিক এখনই আমি জাসনলিন্ট ডট কম এ আমার জেএসনকে বৈধতা দিয়েছি, এটি স্পষ্টতই বলেছে যে এটি একটি ভাইল্ড জসন, তবে এখনও "ত্রুটি" ইভেন্টটি বহিস্কার করা হয়েছে, xhr.status 200 সহ। অন্য কোন কারণ থাকতে পারে? - রমেশ পরিক এখনই সম্পাদনা করুন
রমেশ পরিক

2
অথবা আপনি কেবল "ডেটা টাইপ: জসন" পরামিতিটি মুছতে পারেন
পিয়ারো আলবার্তো

1
আমি ব্যবহার করার সময় কোনও ডেটাটাইপ নির্দিষ্ট না করেই এই একই সমস্যায় পড়েছি $.post। এই ক্ষেত্রে, jquery একটি ডেটাটাইপ অনুমান করে, তারপরে পার্স করতে ব্যর্থ হলে ত্রুটিগুলি । এটি একটি সত্যই বাজে, হার্ড-টু-সন্ধানী গোছা। আমি এটি ডেটাটাইপ সেট করে ঠিক করেছি "text"
মাশমাগার

31

একাধিক, স্পেস-বিভাজিত dataType( jQuery 1.5+ ) ব্যবহার করে আমার কিছু ভাগ্য ভাল । যেমন:

$.ajax({
    type: 'POST',
    url: 'Jqueryoperation.aspx?Operation=DeleteRow',
    contentType: 'application/json; charset=utf-8',
    data: json,
    dataType: 'text json',
    cache: false,
    success: AjaxSucceeded,
    error: AjaxFailed
});

1
জিকিউরি ডকুমেন্টেশনের উপর ভিত্তি করে, একইভাবে, "জসনপ এক্সএমএল" এর মতো একটি শর্টহ্যান্ড স্ট্রিং প্রথমে জাসনপ থেকে এক্সএমএল রূপান্তর করার চেষ্টা করবে এবং এটি ব্যর্থ হয়ে, জাসনপ থেকে পাঠ্যে রূপান্তর করবে এবং তারপরে পাঠ্য থেকে এক্সএমএল রূপান্তর করবে। সুতরাং এটি প্রথমে পাঠ্যকে জসন-এ গোপন করার চেষ্টা করবে, এবং যদি ব্যর্থ হয়, তবে কেবল পাঠ্য হিসাবে গণ্য হবে?
anIBMer

29

আপনার কেবলমাত্র এজেএক্স কলটিতে ডেটা টাইপ: "জসন" সরাতে হবে

$.ajax({
    type: 'POST',
    url: 'Jqueryoperation.aspx?Operation=DeleteRow',
    contentType: 'application/json; charset=utf-8',
    data: json,
    dataType: 'json', //**** REMOVE THIS LINE ****//
    cache: false,
    success: AjaxSucceeded,
    error: AjaxFailed
});

22

এটি কেবলমাত্র রেকর্ডের জন্য যেহেতু আমার সমস্যার সমাধানের জন্য যখন আমি এই পোস্টটিতে ঝাঁপিয়েছি যা ওপি-র মতই ছিল।

আমার ক্ষেত্রে আমার jQuery আজাক্স অনুরোধটি ক্রোমে একই-উত্স নীতির কারণে সফল হতে বাধা পেয়েছিল । যখন আমি আমার সার্ভার (নোড.জেএস) করার জন্য সংশোধন করেছি তখন সমস্ত সমাধান করা হয়েছিল:

response.writeHead(200,
          {
            "Content-Type": "application/json",
            "Access-Control-Allow-Origin": "http://localhost:8080"
        });

আক্ষরিক অর্থে দেওয়ালের বিরুদ্ধে মাথা ঘোরানোর জন্য আমার এক ঘন্টা খরচ হয়েছিল। আমি বোকা বোধ করছি ...


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

15

আমি মনে করি আপনার এসপেক্স পৃষ্ঠাটি কোনও জেএসএন বস্তু ফেরায় না। আপনার পৃষ্ঠায় এই জাতীয় কিছু করা উচিত (পৃষ্ঠা_লোড)

var jSon = new JavaScriptSerializer();
var OutPut = jSon.Serialize(<your object>);

Response.Write(OutPut);

এছাড়াও, আপনার আজাক্সফয়েলটি পরিবর্তন করার চেষ্টা করুন:

function AjaxFailed (XMLHttpRequest, textStatus) {

}

textStatus আপনি যে ধরণের ত্রুটি পাচ্ছেন তা আপনাকে দেওয়া উচিত।


12

আমি একটি আপডেট করা jQuery লাইব্রেরি সহ এই সমস্যার মুখোমুখি হয়েছি। যদি পরিষেবা পদ্ধতিটি কোনও কিছু ফেরত না দেয় তবে এর অর্থ ফেরতের ধরণ void

তারপরে আপনার অ্যাজাক্স কলটিতে উল্লেখ করুন dataType='text'

এটি সমস্যার সমাধান করবে।


8

dataType: 'json'আপনার প্রয়োগকৃত ওয়েব পরিষেবা পদ্ধতিটি যদি শূন্য থাকে তবে আপনাকে কেবল আপনার শিরোনাম থেকে সরিয়ে ফেলতে হবে ।

এই ক্ষেত্রে, আজাক্স কলটি কোনও জেএসএন রিটার্ন ডেটাটাইপ প্রত্যাশা করে না।


4

প্রতিক্রিয়াটি JSON ফর্ম্যাটে (পিএইচপি সংস্করণ) এ রয়েছে তা নিশ্চিত করতে নিম্নলিখিত কোডটি ব্যবহার করুন ...

header('Content-Type: application/json');
echo json_encode($return_vars);
exit;

4

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

public JsonResult ActionName(){
   // Your code
   return Json(new { });
}

3

আমার অনুরূপ সমস্যা আছে তবে আমি যখন ডাটাটাইপটি সরিয়ে দেওয়ার চেষ্টা করেছি: 'জসন' তখনও আমার সমস্যা আছে। আমার ত্রুটি সাফল্যের পরিবর্তে কার্যকর করা হচ্ছে

function cmd(){
    var data = JSON.stringify(display1());
    $.ajax({
        type: 'POST',
        url: '/cmd',
        contentType:'application/json; charset=utf-8',
        //dataType:"json",
        data: data,
        success: function(res){
                  console.log('Success in running run_id ajax')
                  //$.ajax({
                   //   type: "GET",
                   //   url: "/runid",
                   //   contentType:"application/json; charset=utf-8",
                   //   dataType:"json",
                   //   data: data,
                   //  success:function display_runid(){}
                  // });
        },
        error: function(req, err){ console.log('my message: ' + err); }
    });
}

আমি একই জিনিস দেখছি। একটি 200 কোড সহ খালি প্রতিক্রিয়া ত্রুটি হ্যান্ডলারটিকে এখনও ট্রিগার করছে।
ডাবলজোশ

2

আমার জন্য জিনিসগুলিকে গোলমেলে অন্য একটি জিনিসটি localhost127.0.0.1 এর পরিবর্তে বা তার বিপরীতে ব্যবহার করা হয়েছিল । স্পষ্টতই, জাভাস্ক্রিপ্ট একটি থেকে অন্যের কাছে অনুরোধগুলি পরিচালনা করতে পারে না।


2

এটা দেখ । এটিও একই রকম সমস্যা। কাজ করার চেষ্টা করেছি।

অপসারণ করবেন না dataType: 'JSON',

দ্রষ্টব্য: পিএইচপি ফাইলটিতে কেবল JSON ফর্মেট প্রতিধ্বনি করুন আপনি যদি কেবলমাত্র পিএইচপি ব্যবহার করেন তবে আপনার এজ্যাক্স কোড রিটার্ন 200 প্রতিধ্বনিত করে


1

আমারও একই সমস্যা ছিল। এটি ছিল কারণ আমার জেএসওএন প্রতিক্রিয়াতে কিছু বিশেষ অক্ষর রয়েছে এবং সার্ভার ফাইলটি ইউটিএফ -8 এর সাথে এনকোড করা হয়নি, সুতরাং এজ্যাক্স কলটি বিবেচিত হয়েছিল যে এটি কোনও বৈধ JSON প্রতিক্রিয়া নয়।


1

আপনি যদি সর্বদা সার্ভার থেকে জেএসএনকে ফেরত দেন (কোনও খালি প্রতিক্রিয়া নেই), dataType: 'json'কাজ করা উচিত এবং contentTypeএটির প্রয়োজন নেই। তবে নিশ্চিত করুন যে জেএসএন আউটপুট ...

jQuery AJAX বৈধ কিন্তু অপ্রচলিত JSON এর উপর একটি 'পার্সিয়েরার' ফেলে দেবে!


-1

আপনার স্ক্রিপ্টটি JSON ডেটা ধরণে ফেরতের দাবি করে।

এটা চেষ্টা কর:

private string test() {
  JavaScriptSerializer js = new JavaScriptSerializer();
 return js.Serialize("hello world");
}

-9

অনুসরণ করার চেষ্টা করুন

$.ajax({
    type: 'POST',
    url: 'Jqueryoperation.aspx?Operation=DeleteRow',
    contentType: 'application/json; charset=utf-8',
    data: { "Operation" : "DeleteRow", 
            "TwitterId" : 1 },
    dataType: 'json',
    cache: false,
    success: AjaxSucceeded,
    error: AjaxFailed
});

অথবা

$.ajax({
    type: 'POST',
    url: 'Jqueryoperation.aspx?Operation=DeleteRow&TwitterId=1',
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    cache: false,
    success: AjaxSucceeded,
    error: AjaxFailed
});

JSON অবজেক্টে একক উদ্ধৃতির পরিবর্তে ডাবল কোট ব্যবহার করুন। আমি মনে করি এটি সমস্যার সমাধান করবে।

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