كيف يمكنني تفسير JSON عاد من jQuery.ajax وباستخدام إجراء وظيفة؟

StackOverflow https://stackoverflow.com/questions/612515

  •  03-07-2019
  •  | 
  •  

سؤال

ولدي رمز مسج التالية:

$.ajax({
    type: "POST",
    url: "Services/MyService.asmx/Select",
    dataType: "json",
    data: "{'data':'test'}",
    contentType: "application/json; charset=utf-8",
    success: function(msg){ 
                alert(msg); 
             },
    error: function(xhr){ alert(xhr.statusText);}                
});

والدعوة إلى الأسلوب بإرجاع ما يلي:

"{"FirstName":"James"}"

عند أحصل على القيمة مرة أخرى، في حالة تأهب بلدي إرجاع سلسلة سلمان الكاملة. إذا كنت تحاول أن تفعل alert(msg.FirstName)، أحصل على "غير محددة".

ولقد رأيت الكثير من الأمثلة باستخدام طريقة getJSON ()؛ ومع ذلك، أنا لم أر وسيلة لاستخدام ذلك لفعل POST. يمكن لأي شخص لي نقطة في الاتجاه الصحيح أين سأذهب الخطأ؟ واستنادا إلى وثائق مسج، يجب أن تكون القيمة مقابل نفس نوع البيانات (سلمان) لذلك أنا ليس من المؤكد ما أنا في عداد المفقودين.

وتحرير: نظرت في خدمة بلدي وأنها مطابقة الأمثلة التي أنا وجدت من حيث توقيع الأسلوب عودته سلسلة. كنت أكدت أيضا نوع الاستجابة التطبيق / سلمان.

وEDIT2: تحديث استجابة لتشمل اقتباسات الخارجية. أنا أيضا باستخدام JavaScriptConverter مخصصة للقيام التسلسل JSON. تحويل مخصص يستغرق فقط خصائص الكائن بلدي (في هذه الحالة الاسم الأول) ويحمل عليه وقيمة إلى مجموعة القاموس الذي V1.0 ASP.Net AJAX ملحقات يمكن تسلسل بسهولة.

وEDIT3: النظر في القضية التي كنت أعاني مع وحدة التقييم () (تسبب خطأ Expected ";")، لاحظت أن أسماء الخصائص سلمان وأرفقت أيضا في الاقتباس. مرة واحدة وإزالة علامات الاقتباس من اسم الخاصية (لا قيمة)، وعملت وحدة التقييم () مرة أخرى. أبحث في الجانب الخادم لهذه القضية الآن

.
هل كانت مفيدة؟

المحلول

والاستخدام .ajax مسج تبدو صلبة. كيف حالك التحقق من البيانات التي تم إرجاعها؟ الحرائق؟ العابث؟ لأن خدمات ويب .asmx لا يعودون البيانات مثل {"FirstName":"James"}. الردود تبدو أكثر مثل:

{"d":{"FirstName":"James"}}

و(راجع HTTP: //encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/ )

لرد success، حاول:

function(res) { alert(res.d.FirstName) }

تعديل : في المنشار الخاص بك التحديثات وتعليق إعادة V1.0 من ASP.Net AJAX:

وأنا لست إيجابية كيف يعمل V1.0 WRT تسلسل ردكم، ولكن تخميني هو إذا كنت تفعل بنفسك مخصص JSON التسلسل في طريقة خدمة ويب الخاص بك، قد يكون استجابة الحصول JSON تسلسل <م> مرة أخرى . لذلك كنت تسلسل مرتين.

وأعتقد أن جميع مكونات كنت تستخدم يفعلون ما كنت من المفترض أن، انها مجرد الآن رد success الخاص بك يحتاج إلى unserialize يدويا منذ كنت تسلسل يدويا على الملقم:

function(res) {
    res = eval('(' + res + ')');
    alert(res.FirstName);
}

نصائح أخرى

وIIRC يمكنك حدة التقييم السلسلة، وستكون النتيجة الكائن سلمان.

وmyJSON = وحدة التقييم (jsonString)؛

ويمكنك تحديد المتغيرات مشاركتك مع كائن JSON كمعلمة الثاني.

مثال:

$.getJSON("service.py",
    { foo: bar },
    function(data) {
        $.each(data, function() { // blah });
    }
);

وتحرير: أرى ماذا يعني لك الآن. هل لديك خدمة العودة "شيء / سلمان" كنوع MIME؟ إذا كنت تبحث في رؤوس استجابة في الحرائق، وينبغي أن ننظر بشيء من هذا القبيل:

Content-Type    application/json; charset=utf-8

ومحاولة شيء من هذا القبيل:

 result = eval('(' + result.d + ')');

ولا يمكنك استخدام $getJSON مع خدمات ASMX تسلسل من خلال System.Web.Extensions. كنت تريد أن تجعل الدعوة بشكل صحيح مع $.ajax().

هل حاولت استخدام الحرائق لتعيين نقطة توقف داخل معالج النجاح ويتفقد <م> جي اس قيمة؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top