Nu s-a putut obține răspuns JSON din solicitarea AJAX pe mai multe domenii

Folosesc un magazin JSON în ExtJS și primesc datele de la un serviciu web ASP.net. Aceasta returnează datele cu succes dacă le folosesc în același domeniu, dar într-un domeniu încrucișat returnează o eroare:

XMLHTTPREQUEST Antetul de acces-control-origine nu este permis de către   Origine

Aici este codul meu:

var myStore = new Ext.data.JsonStore({
   //Load data at once
    autoLoad: true,

   //Override default http proxy settings
    proxy: new Ext.data.HttpProxy({
       //Call web service method using GET syntax
        type:'ajax',
        url: path+'SelectIncidentList',
        restful:true,

       //Ask for Json response
        headers: {'Content-type': 'application/json'},
        reader:    {
            type: 'json',
            root: 'd'
        },
    }),

    id: 'incidentid',

   //Fields declaration
    fields: ['incidentid','occured','headline','source','enteredby','bodyintro','webaddress','location1','location2','location3','location4','image','incidenttypeid','incidentsubtypeid']
});

* EDIT *

Bazat pe răspunsurile pe care le-am primit, mi-am schimbat codul pentru a utiliza JSONP. Cu toate acestea, mă confrunt cu o altă problemă. Cu aceste modificări la codul meu ExtJS:

var myStore = new Ext.data.JsonStore({
autoLoad: true,

// Override default http proxy settings
proxy: new Ext.data.proxy.JsonP({
    type:'jsonp',
    url: path+'SelectoccurList',
    headers: {'Content-type': 'application/json'},
    reader: {
        type: 'json',
        root: 'd'
    },
}),
id: 'occurid',

// Fields declaration
fields: ['occurid','occured','headline','source','enteredby','bodyintro','webaddress','location1','location2','location3','location4','image','occurtypeid','occursubtypeid']
});

M-am confruntat cu următoarea eroare:

<?xml version="1.0" encoding="utf-8"?>
**SelectOccurList:-1Resource interpreted as Script but transferred with MIME type      text/xml.
SelectOccurList:1SyntaxError: Unexpected token '<'**


   22
   2012-05-26T04:33:53-04:00
   headline
   content
 
 <bodyintro>content

29 -156.364



url of iamge
0
0


 23
 2012-05-26T15:41:52-04:00
 headline
 test content
 
 <bodyintro>test content
 
 27.75974 -82.67853
 
 
 
  url of image


 

  24
  test
  
  
  
  <bodyintro />
  
  
  
  
  
  
  0
  0
 

 25
 Testing
 Testing 28 05 
 Dummy
 XYZ
 <bodyintro>This occur is dummy
 http://
 5cd41415-5c60-4cbd-a6f3-05330b368a41
 
 
 
 
 0
 0
3
adăugat autor Diodeus - James MacFarlane, sursa

2 răspunsuri

Exact aici ați folosi Proxy JsonP pentru, care utilizează o funcție de scriere + funcție de apel înapoi pentru a obține în jurul aceleiași restricții ale browserului de domeniu. Documentația antetului conectat îl explică pe deplin cu un exemplu de cod, inclusiv câteva implementări de bază ale serverului.

Cealaltă opțiune ar fi de fapt proxy apelul pe serverul dvs. - adică proxy-ul Ajax sună la serverul dvs., care apoi sună la serverul de la distanță și formatează un răspuns standard JSON înapoi la client. Pur și simplu nu puteți efectua apelul direct de la client la serverul de la distanță.

4
adăugat

You can configure your server to setting "access-control-" headers. https://developer.mozilla.org/en/http_access_control

0
adăugat
Da, dar nu uitați să notați compatibilitatea cu browser-ul înainte de a face acest lucru ca fiind singurul dvs. soluţie.
adăugat autor Brian Moeskau, sursa
JavaScript, România - Moldova
JavaScript, România - Moldova
328 participanți

Comunitatea Română JavaScript: github.com/js-ro Pentru confort, opriți notificările. Parteneri: @node_ro, @php_ro, @python_ro, @seo_ro, @RomaniaGroup, @ai_ro, @Grupuri_IT Offtop: @holywars_ro Joburi: @js_jobs_ro Sponsored with ❤️ by ciupacabra.com