jQuery এজাক্স অনুরোধের জন্য "পার্সেরিরর" ফিরিয়ে দিচ্ছে


186

অ্যাজাক্স অনুরোধের জন্য জ্যাকোয়ারি থেকে "পার্সেরেরর" পেয়েছি, আমি পোষ্টকে জিইটি-র পরিবর্তনের চেষ্টা করেছি, কয়েকটি ভিন্ন উপায়ে (ক্লাস তৈরি করা ইত্যাদি) উপাত্ত ফিরিয়ে দিচ্ছি তবে সমস্যাটি কী তা বুঝতে পারছি না।

আমার প্রকল্পটি এমভিসি 3 এ রয়েছে এবং আমি jQuery 1.5 ব্যবহার করছি আমার একটি ড্রপডাউন রয়েছে এবং অন্বেষণ ইভেন্টে আমি কোন কলটি নির্বাচিত হয়েছিল তার উপর ভিত্তি করে কিছু তথ্য পাওয়ার জন্য কল বন্ধ করি।

ড্রপডাউন: (এটি ভিউব্যাগের তালিকা থেকে "ভিউগুলি" লোড করে এবং ইভেন্টটি ফায়ার করা ভাল কাজ করে)

@{
    var viewHtmls = new Dictionary<string, object>();
    viewHtmls.Add("data-bind", "value: ViewID");
    viewHtmls.Add("onchange", "javascript:PageModel.LoadViewContentNames()");
}
@Html.DropDownList("view", (List<SelectListItem>)ViewBag.Views, viewHtmls)

javascript:

this.LoadViewContentNames = function () {
    $.ajax({
        url: '/Admin/Ajax/GetViewContentNames',
        type: 'POST',
        dataType: 'json',
        data: { viewID: $("#view").val() },
        success: function (data) {
            alert(data);
        },
        error: function (data) {
            debugger;
            alert("Error");
        }
    });
};

উপরের কোডটি সাফল্যের সাথে এমভিসি পদ্ধতিতে কল করে এবং প্রত্যাবর্তন করে:

[{"ViewContentID":1,"Name":"TopContent","Note":"Content on the top"},
 {"ViewContentID":2,"Name":"BottomContent","Note":"Content on the bottom"}]

কিন্তু jquery "পার্সেরেরর" বলে saying .জ্যাক্স () পদ্ধতির জন্য ত্রুটি ইভেন্টটিকে আগুন ধরিয়ে দেয়।


এটি কি কনসোলটিতে জাভাস্ক্রিপ্ট ত্রুটি চালিত করে বা error .Axax () কমান্ডের "ত্রুটি" হ্যান্ডলার ফাংশনটি কার্যকর করা হয়?
আর্নোরহ

দুঃখিত, আরও সুনির্দিষ্ট হওয়া উচিত ছিল, এটি aj .জ্যাক্স () ত্রুটি ফাংশন {সতর্কতা ("ত্রুটি") ফায়ার করে; }
ডিকার্জন

লাইভ লিঙ্কের কোনও সুযোগ? আপনি ফায়ারব্যাগে যে JSON ডেটা দেখান তা কি দেখেন?
পেক্কা

না আমার লাইভ লিঙ্ক নেই। তবে হ্যাঁ এটি ফায়ারবগে প্রদর্শিত জেএসওএন প্রতিক্রিয়া।
dkarzon

হ্যাঁ, আমার খারাপটি টাইপো ছিল। ফিক্সড প্রশ্ন
dkarzon

উত্তর:


306

আমি সম্প্রতি এই সমস্যার মুখোমুখি হয়েছি এবং এই প্রশ্নে হোঁচট খেয়েছি।

আমি এটি অনেক সহজ উপায়ে সমাধান করেছি।

পদ্ধতি এক

আপনি হয় dataType: 'json'আক্ষরিক বস্তু থেকে সম্পত্তিটি সরিয়ে ফেলতে পারেন ...

পদ্ধতি দুটি

অথবা আপনার ডেটা ফেরত দিয়ে @ সাজিভ যা বলেছিল তা আপনি করতে পারেন Json


এই parsererrorবার্তাটি হবার কারণ হ'ল আপনি যখন কোনও স্ট্রিং বা অন্য কোনও মান ফিরিয়ে দেন, তা আসলে হয় নাJson তাই পার্স করার সময় পার্সার ব্যর্থ হয়।

সুতরাং আপনি যদি dataType: jsonসম্পত্তিটি সরিয়ে থাকেন তবে এটি এটিকে পার্স করার চেষ্টা করবে না Json

অন্য পদ্ধতির সাথে যদি আপনি নিজের ডেটা হিসাবে ফেরত পাঠানোর বিষয়টি নিশ্চিত করেন Jsonতবে পার্সার কীভাবে এটি সঠিকভাবে পরিচালনা করবেন তা জানবেন।


4
ধন্যবাদ ডেভিড, মেথড ওয়ান আমার পক্ষে কাজ করেছে। আমার ক্ষেত্রে আমি কিছু ফিরিয়ে দিতে চাইছি না তবে ভুল করে একটি ডেটাটাইপ ব্যবহার করেছি। বখশিশের জন্য ধন্যবাদ.
কৃষ্ণ তেজা বীরমচেনেনি

প্রতিক্রিয়াটির জন্য ধন্যবাদ, আমি সন্ধানের জন্য উত্তরটি আপডেট করেছি কারণ এটি আরও ভাল সমাধান বলে মনে হচ্ছে।
dkarzon

যখন আমার পিএইচপি স্ক্রিপ্টে ত্রুটি হয়েছিল তখন আমি এই সমস্যার মুখোমুখি হয়েছি এবং নন-জেএসওএন ডেটা ফিরিয়ে দিচ্ছি - dataType সত্যই অক্ষম করার জন্য একটি দরকারী পরামর্শ !
শারদ

ধন্যবাদ! এটি jquery.fileupload.js এবং JQuery AJAX পদ্ধতি ব্যবহার করে অন্যান্য গ্রন্থাগারগুলিতেও প্রযোজ্য। বিভ্রান্তিকর ত্রুটি বার্তা!
kqr

আমি রেইলস jquery-ujs ব্যবহার করে এই সমস্যাটি পাচ্ছি
Donato

29

সমস্যাটি পরিচালনা করার সঠিক উপায়ের জন্য @ ডেভিড-ইস্টের উত্তর দেখুন

এই উত্তরটি কেবল ফাইল: প্রোটোকল ব্যবহার করার সময় jQuery 1.5 সহ একটি বাগের সাথে সম্পর্কিত

JQuery 1.5 তে আপগ্রেড করার সময় সম্প্রতি আমার একই সমস্যা হয়েছিল had সঠিক প্রতিক্রিয়া পাওয়া সত্ত্বেও ত্রুটি হ্যান্ডলার বরখাস্ত। আমি completeইভেন্টটি ব্যবহার করে এবং তারপরে স্থিতির মানটি পরীক্ষা করে এটি সমাধান করেছি । উদাহরণ:

complete: function (xhr, status) {
    if (status === 'error' || !xhr.responseText) {
        handleError();
    }
    else {
        var data = xhr.responseText;
        //...
    }
}

1
JQuery 1.5.1 এ স্থির করা হয়েছে
johnhunter

13
আমার এই সমস্যাটি 1.7.2 এ রয়েছে :(
ইস্টিন বাই

6
আমার কেবল এই সমস্যাটি ছিল, তবে আমি ডেটাটাইপ সরিয়েছি: 'জসন' এবং সমস্যাটি সমাধান হয়েছে was যেহেতু এটি একটি আসল ফর্মটি জসনটি ফেরতছে না এটি পার্সার ত্রুটির মুখোমুখি হবে।
ডেভিড পূর্ব

3
১.৯.১-এ আমি এই সমস্যাটি নিয়ে আসছি এবং আমার এপিআই খালি হ্যাশ ফিরিয়ে দিয়ে আমি এটির কাছাকাছি চলে এসেছি {}। লজ্জা এটি প্রয়োজনীয়।
অ্যাডাম টটল

4
এটি আসলে ডকুমেন্টেশনে রয়েছে: ...The JSON data is parsed in a strict manner; any malformed JSON is rejected and a parse error is thrown. As of jQuery 1.9, an empty response is also rejected; the server should return a response of null or {} instead. api.jquery.com/jQuery.ajax
রব

17

আপনি এজ্যাক্স কল প্রতিক্রিয়া ডেটা টাইপটি নির্দিষ্ট করেছেন :

'JSON'

যেখানে প্রকৃত এজাক্স প্রতিক্রিয়াটি কোনও বৈধ জেএসএন নয় এবং ফলস্বরূপ জেএসএন পার্সার একটি ত্রুটি ছুঁড়ে দিচ্ছে।

আমি সর্বোত্তম পদ্ধতির যে সুপারিশ করব তা হ'ল ডেটা টাইপ এ পরিবর্তন করা:

'টেক্সট'

এবং সাফল্যের কলব্যাকের মধ্যে বৈধ জেএসএন ফেরত আসছিল কিনা তা যাচাই করা হবে এবং যদি জেএসওএন বৈধতা ব্যর্থ হয় তবে এটি স্ক্রিনে সতর্ক করুন যাতে এজ্যাক্স কলটি আসলে কী কারণে ব্যর্থ হচ্ছে its এটি একবার দেখুন:

$.ajax({
    url: '/Admin/Ajax/GetViewContentNames',
    type: 'POST',
    dataType: 'text',
    data: {viewID: $("#view").val()},
    success: function (data) {
        try {
            var output = JSON.parse(data);
            alert(output);
        } catch (e) {
            alert("Output is not valid JSON: " + data);
        }
    }, error: function (request, error) {
        alert("AJAX Call Error: " + error);
    }
});

1
বা ডেটাটাইপটি অপসারণ করুন :)
আলেকজান্ডার

10

সমস্যাটি হ'ল আপনার নিয়ামক রিটারিং স্ট্রিং বা অন্য কোনও জিনিস যা পার্স করা যায় না। এজ্যাক্স কলটি প্রত্যাশায় জেসনকে পাওয়ার আশা করেছিল। এটির মতো নিয়ামকটিতে JsonResult ফেরত দেওয়ার চেষ্টা করুন:

 public JsonResult YourAction()
    {
        ...return Json(YourReturnObject);

    }

আশা করি এটা সাহায্য করবে :)


দুঃখিত, আমার কোডবিহাইন্ড অন্তর্ভুক্ত করতে ভুলে গেছেন, তবে ঠিক কীভাবে জসনকে ফিরিয়ে দেওয়া হয়েছে ts
dkarzon


4

অপসারণ করার জন্য প্রচুর পরামর্শ রয়েছে

dataType: "json"

আমি মঞ্জুর করার সময় এটি অন্তর্নিহিত সমস্যাটিকে উপেক্ষা করে এটি কাজ করে। যদি আপনি আত্মবিশ্বাসী হন যে রিটার্নের স্ট্রিংটি সত্যিই JSON তবে প্রতিক্রিয়াটির শুরুতে ভ্রান্ত স্পেস সন্ধান করুন। ফিডলারে এটি একবার দেখুন বিবেচনা করুন। আমার এইরকম লাগছিল:

Connection: Keep-Alive
Content-Type: application/json; charset=utf-8

{"type":"scan","data":{"image":".\/output\/ou...

আমার ক্ষেত্রে এটি পিএইচপি অবাঞ্ছিত চরিত্রগুলি খুঁজে বের করার ক্ষেত্রে সমস্যা ছিল (এই ক্ষেত্রে ইউটিএফ ফাইল বিওএমগুলি)। একবার আমি এগুলি সরিয়েছি যখন এটি রাখার সময় সমস্যাটি স্থির হয়ে গেল

dataType: json

এটির সাথে একমত ... আমি প্রতিক্রিয়াটি যাচাই করেছিলাম এবং এটি একটি var_dump () যা অ্যাপ্লিকেশনে কোনও জায়গায় হারিয়ে গেছে।
চক

2

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


0

আমি জানি না এটি এখনও বাস্তব কিনা তবে সমস্যাটি এনকোডিংয়ের সাথে ছিল। এএনএসআইতে পরিবর্তন করা আমার জন্য সমস্যার সমাধান করেছে।


0

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

$.ajax({
    url: '/Test/Something/',
    type: 'GET',
    dataType: 'json',
    cache: false,
    data: { viewID: $("#view").val() },
    success: function (data) {
        alert(data);
    },
    error: function (data) {
        debugger;
        alert("Error");
    }
});

0

আপনার ডেটা টাইপটি সরানো উচিত: "জসন"। তারপরে ম্যাজিকটি দেখুন ... এ জাতীয় জিনিস করার কারণটি হ'ল আপনি জসন বস্তুকে সরল স্ট্রিংয়ে রূপান্তর করছেন .. সুতরাং জসন পার্সার কোনও স্ট্রিংটি জেসন অবজেক্ট না হওয়ার কারণে পার্স করতে পারছেন না।

this.LoadViewContentNames = function () {
$.ajax({
    url: '/Admin/Ajax/GetViewContentNames',
    type: 'POST',
    data: { viewID: $("#view").val() },
    success: function (data) {
        alert(data);
    },
    error: function (data) {
        debugger;
        alert("Error");
    }
 });
};

0

ওয়েব। নেট এমভিসি / এপিআই থেকে অপারেশন পান না করে নিশ্চিত হয়ে নিন যে আপনি অনুমতি পেয়েছেন

     return Json(data,JsonRequestBehavior.AllowGet);

0

আমি "ত্রুটির সাথে অনুরোধ ফেরতের অনুরোধ: পার্সেরেররর "ও পাচ্ছিলাম। জাভাস্ক্রিপ্ট কনসোল এ। আমার ক্ষেত্রে এটি জসনের বিষয় ছিল না, তবে আমাকে ভিউ পাঠ্য অঞ্চলে একটি বৈধ এনকোডিং দিতে হয়েছিল।

  String encodedString = getEncodedString(text, encoding);
  view.setTextAreaContent(encodedString);

0

আমি এ জাতীয় ত্রুটির মুখোমুখি হয়েছি তবে ক্লায়েন্টের কাছে পাঠানোর আগে আমার প্রতিক্রিয়াটি সংশোধন করার পরে এটি ভাল কাজ করেছে।

//Server side
response = JSON.stringify('{"status": {"code": 200},"result": '+ JSON.stringify(result)+'}');
res.send(response);  // Sending to client

//Client side
success: function(res, status) {
    response = JSON.parse(res); // Getting as expected
    //Do something
}

0

আমার একই সমস্যা ছিল, প্রমাণিত web.configহয়েছিল আমার সতীর্থদের সাথে আমার একই ছিল না। সুতরাং আপনার পরীক্ষা করুন web.config

আশা করি এটি কাউকে সাহায্য করবে।


-1

সমস্যাটি

window.JSON.parse p .parseJSON ফাংশনে একটি ত্রুটি উত্থাপন করে।

<pre>
$.parseJSON: function( data ) {
...
// Attempt to parse using the native JSON parser first
if ( window.JSON && window.JSON.parse ) {
return window.JSON.parse( data );
}
...
</pre>

আমার সমাধান

ওভারলোডিং জিকুয়েরি প্রয়োজনীয়জেএস সরঞ্জাম ব্যবহার করে ।

<pre>
define(['jquery', 'jquery.overload'], function() { 
    //Loading jquery.overload
});
</pre>

jquery.overload.js ফাইল সামগ্রী

<pre>
define(['jquery'],function ($) { 

    $.parseJSON: function( data ) {
        // Attempt to parse using the native JSON parser first
        /**  THIS RAISES Parsing ERROR
        if ( window.JSON && window.JSON.parse ) {
            return window.JSON.parse( data );
        }
        **/

        if ( data === null ) {
            return data;
        }

        if ( typeof data === "string" ) {

            // Make sure leading/trailing whitespace is removed (IE can't handle it)
            data = $.trim( data );

            if ( data ) {
                // Make sure the incoming data is actual JSON
                // Logic borrowed from http://json.org/json2.js
                if ( rvalidchars.test( data.replace( rvalidescape, "@" )
                    .replace( rvalidtokens, "]" )
                    .replace( rvalidbraces, "")) ) {

                    return ( new Function( "return " + data ) )();
                }
            }
        }

        $.error( "Invalid JSON: " + data );
    }

    return $;

});
</pre>

-1

আপনি যদি মুছে ফেলতে / পরিবর্তন করতে না চানdataType: json , আপনি একটি কাস্টম সংজ্ঞায়িত করে jQuery এর কঠোর পার্সিংটিকে ওভাররাইড করতে পারেন converter:

$.ajax({
    // We're expecting a JSON response...
    dataType: 'json',

    // ...but we need to override jQuery's strict JSON parsing
    converters: {
        'text json': function(result) {
            try {
                // First try to use native browser parsing
                if (typeof JSON === 'object' && typeof JSON.parse === 'function') {
                    return JSON.parse(result);
                } else {
                    // Fallback to jQuery's parser
                    return $.parseJSON(result);
                }
            } catch (e) {
               // Whatever you want as your alternative behavior, goes here.
               // In this example, we send a warning to the console and return 
               // an empty JS object.
               console.log("Warning: Could not parse expected JSON response.");
               return {};
            }
        }
    },

    ...

এটি ব্যবহার করে আপনি প্রতিক্রিয়াটিকে JSON হিসাবে পার্স করতে না পারলে আপনি আচরণটি কাস্টমাইজ করতে পারেন (এমনকি যদি আপনি একটি খালি প্রতিক্রিয়া বডি পান তবে!)

এই কাস্টম রূপান্তরকারীর সাহায্যে, .done()/ successযতক্ষণ না অনুরোধটি অন্যথায় সফল হয়েছিল (1XX বা 2XX প্রতিক্রিয়া কোড) ততক্ষণ ট্রিগার হবে।

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