JQuery.ajax-da 'application / json' içindəki məzmun tipini təyin edə bilmir

Bu kodu verdiyim zaman

 $.ajax({ type: 'POST', //contentType: "application/json", url: 'http://localhost:16329/Hello', data: { name: 'norm' }, dataType: 'json' }); 

Fiddlerdə aşağıdakı xammal təyini görürəm

 POST http://localhost:16329/Hello HTTP/1.1 Host: localhost:16329 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2 Accept: application/json, text/javascript, **;q=0.8 Accept-> 

Niyə? Orada olanda OPTIONS nədir? Mənim məzmunum növü tətbiqə / json-a qədədi? Və bəzi səbəblərə görə istək parametrləri itdi.

1 yeniləmə

Server tərəfində həqiqətən sadə RESTful xidmətim var.

 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class RestfulService : IRestfulService { [WebInvoke( Method = "POST", UriTemplate = "Hello", ResponseFormat = WebMessageFormat.Json)] public string HelloWorld(string name) { return "hello, " + name; } } 

Amma nədənsə bu metod parametrləri deyə bilmərəm.

GÜNCELLEME 2

Uzun müddət cavab vermirəm.

Bu başlığı serverə əlavə etdim

  Access-Control-Allow-Origin: * Access-Control-Allow-Headers: Content-Type Access-Control-Allow-Methods: POST, GET, OPTIONS 

Bu kömək etməyib, serverdən gələn səhvləri həll etmədi.

Bu mənim skripkaçı deyir

Beləliklə, indi serverim POST, GET, OPTIONS (cavab müəllifləri gözlədiyim kimi işləyərsə) qəbul etdiyinə əmin ola bilərəm. Amma nəyə görə "Metod icazə verilmir"?

Serverdən gələn WebView cavabında (yuxarıda göstərilən Raw cavabını görə bilərsiniz) belə görünür:

2019

77
18 марта '12 в 2:39 2012-03-18 02:39 Vitalii Korsakov 18 mart 12: 00-da 2: 39-da təyin olunub
@ 7 cavab

HTTP POST başlığının göndərildiyini təmin edən url parametresinden http:// aradan qaldırılması görünür.

Sizə ev sahibinin adını tam uyğunlaşdırmaq lazım olduğunu düşünmürəm, sadəcə olaraq göstərilən URL'yi aşağıda göstərildiyi kimi istifadə edin.

  $.ajax({ type: "POST", contentType: "application/json", url: '/Hello', data: { name: 'norm' }, dataType: "json" }); 

Mənim işimə nümunə:

  $.ajax({ type: "POST", url: siteRoot + "api/SpaceGame/AddPlayer", async: false, data: JSON.stringify({ Name: playersShip.name, Credits: playersShip.credits }), contentType: "application/json", complete: function (data) { console.log(data); wait = false; } }); 

Mümkündür: JQuery $ .ajax (), $ .fungi Firefox-da REQUEST_METHOD kimi "OPTIONS" göndərmək

Düzenle: Bir neçə tədqiqatdan sonra, OPTIONS başlığının, istəkin mənbə domainindən icazə verildiyini öyrənmək üçün istifadə edildiyini öyrəndim. Fiddler istifadə edərək, serverimdən gələn cavablar üçün aşağıdakıları əlavə etdim.

  Access-Control-Allow-Origin: * Access-Control-Allow-Headers: Content-Type Access-Control-Allow-Methods: POST, GET, OPTIONS 

Brauzer bu cavabı aldıqdan sonra, json məlumatları ilə düzgün POST sorğu göndərdi. Urlencoded olan default content növü təhlükəsiz sayılır və buna görə də əlavə cross-domain yoxlamalarına tabe olmur.

Sözügedən başlıqları bir OPTIONS sorğusuna server cavablarına əlavə etmək lazımdır. Əlbəttə ki, bunları hər hansı bir deyil, müəyyən domenlərin istəklərinə icazə vermək üçün konfiqurasiya etməliyik.

Bunu sınamaq üçün aşağıdakı jQuery istifadə etdim.

 $.ajax({ type: "POST", url: "http://myDomain.com/path/AddPlayer", data: JSON.stringify({ Name: "Test", Credits: 0 }), //contentType: "application/json", dataType: 'json', complete: function(data) { $("content").html(data); } });​ 

Ədəbiyyat:

64
18 марта '12 в 15:36 2012-03-18 15:36 Cavab 18 Mart 2012-ci il saat 15: 15-da baş verir. 2012-03-18 15:36

Mən bunu necə istifadə etdiyimi göstərə bilərəm

border=0
  function GetDenierValue() { var denierid = $("#productDenierid").val() == '' ? 0 : $("#productDenierid").val(); var param = { 'productDenierid': denierid }; $.ajax({ url: "/Admin/ProductComposition/GetDenierValue", dataType: "json", contentType: "application/json;charset=utf-8", type: "POST", data: JSON.stringify(param), success: function (msg) { if (msg != null) { return msg.URL; } } }); } 
23
18 марта '12 в 15:34 2012-03-18 15:34 Cavab Amritpal Singh 18 mart 2012-ci il saat 15: 34-da verilir

Bunun üçün lazım olan bütün bunları əlavə etməkdir:

 headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' } 

poçt tələbiniz üçün bir sahə olaraq və işləyəcək.

8
19 янв. Jan 19-da Cody Jak tərəfindən verilmiş cavab 2016-01-19 21:53 '16 saat 09:53 'da 2016-01-19 21:53

Mən bu ekranları tanıyıram, CodeFluentEntities istifadə edirəm və mənim üçün çalışdığım bir həll var.

Mən bu dizaynı istifadə edirəm:

 $.ajax({ url: path, type: "POST", contentType: "text/plain", data: {"some":"some"} } 

istifadə etdiyiniz kimi görürsünüz

 contentType: "", 

və ya

 contentType: "text/plain", //chrome 

Hər şey yaxşı işləyir.

Mən sizə lazım olan hər şeyin 100% olduğuna inanmıram, çünki başlıqlarımı dəyişdirdim.

4
27 февр. Fevralın 27-də Alexey Avdeyev tərəfindən cavablandırılıb 2015-02-27 10:15 '15 saat 10:15 'da 2015-02-27 10:15

Burada bu problemin həllini tapdım. IIS tətbiq xidmət işleyicisi üçün verb variantlarını aktivləşdirməyi unutmayın.

Böyük işləyir. Təşəkkür edirəm, Andre Pedroso.: -)

2
11 сент. Cavab Fanda 11 sentyabrda verilir. 2013-09-11 14:34 '13 'da 14:34 2013-09-11 14:34

Eyni problemim vardı. Jboss server java istirahət tətbiqini idarə edirəm. Amma həll ASP.NET web tətbiqinə bənzəyir.

Firefox, hansı parametrlərə icazə verildiyini yoxlamaq üçün server / mənbə URL'sinə ilkin zəng edir. Bu, "OPTIONS" sorğusudur, bu da serverinizin cavab vermir. Bu OPTIONS cavabına düzgün cavab verildiyində, ikinci bir çağırış edilir, bu, json məzmunu ilə faktiki "POST" tələbidir.

Bu, yalnız bir qarşılıqlı domen zəng edərkən baş verir. Eyni halda, ' http://localhost:16329/Hello ' http://localhost:16329/Hello bir URL http://localhost:16329/Hello yerinə ' http://localhost:16329/Hello / Hello'

Bir qarşılıqlı domen zəng etmək niyyətindəsiniz, "OPTIONS" HTTP tələbini dəstəkləyən əlavə bir metoddan istifadə edərək, bayram xidmətinizin sinifini yüksəltməlisiniz. Bu, java tətbiqinə cavab verir:

 @Path("/rest") public class RestfulService { @POST @Path("/Hello") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.TEXT_PLAIN) public string HelloWorld(string name) { return "hello, " + name; } //THIS NEEDS TO BE ADDED ADDITIONALLY IF MAKING CROSS-DOMAIN CALLS @OPTIONS @Path("/Hello") @Produces(MediaType.TEXT_PLAIN+ ";charset=utf-8") public Response checkOptions(){ return Response.status(200) .header("Access-Control-Allow-Origin", "*") .header("Access-Control-Allow-Headers", "Content-Type") .header("Access-Control-Allow-Methods", "POST, OPTIONS") //CAN BE ENHANCED WITH OTHER HTTP CALL METHODS .build(); } } 

Beləliklə, mən hesab edirəm ki, .NET-də ekli əlavə metodu əlavə etməlisiniz

 [WebInvoke( Method = "OPTIONS", UriTemplate = "Hello", ResponseFormat = WebMessageFormat.)] 

aşağıdakı başlıqlar quraşdırılmışdır

 .header("Access-Control-Allow-Origin", "*") .header("Access-Control-Allow-Headers", "Content-Type") .header("Access-Control-Allow-Methods", "POST, OPTIONS") 
1
09 дек. cavab Vincent 09 dekabrda verilir. 2014-12-09 19:07 '14 at 19:07 2014-12-09 19:07

Bunu istifadə edərsən:

 contentType: "application/json" 

AJAX serverə GET və ya POST parametrləri göndərməyəcəkdir .... Niyə bilmirəm.

Bu gün onu boşaltmaq üçün mənə bir neçə saat sürdü.

Yalnız istifadə edin:

 $.ajax( { url : 'http://blabla.com/wsGetReport.php', data : myFormData, type : 'POST', dataType : 'json', // contentType: "application/json", success : function(wsQuery) { } } ) 
0
04 марта '17 в 3:55 2017-03-04 03:55 Cavab Luis Arturo Erique Guajala tərəfindən 04 Mart '17' də 3:55 2017-03-04 03:55 'də verilir

tags ilə bağlı digər suallar və ya soruşun