2013-02-06 2 views
2

Я пытаюсь сделать запрос перекрестного домена для отправки/получения некоторых данных. Я не могу пройти мимо object error. Прежде чем я получил ошибку No Transport, но добавив Query.support.cors = true;, эта проблема была решена.Ошибка объекта JSONP

var url = "http://CROSSDOMAINSERVER:PORT/Service1.svc/GetDataUsingDataContract"; 
      $.ajax({ 
       type: 'GET', 
       url: url, 
       data: 'tool=1&product=Some%20Product&details=9&bogus=should%20not%20pass%20validation', 
       datatype: "jsonp", 
       contentType: "application/json", 
       success: function (response) { 
        alert(response.data); 
       }, 
       error: function (error) { 
        alert(error.statusText); 
       } 
      }); 

Если я ввожу URL в браузере:

http://CROSSDOMAINSERVER:PORT/Service1.svc/GetDataUsingDataContract?&tool=1&product=Some%20Product&details=9&bogus=should%20not%20pass%20validation 

я получаю правильный ответ.

{"d":{"__type":"ClientSideData:#ProdResourceToolService","details":"9","product":"Some Product","result":"1","site":"Somewhere, SD","systime":"2\/6\/2013 2:50:20 PM","team":"0000000000","tool":"1","user":"username"}} 

Когда я использую Ajax он не подает его в базу данных или возвращать данные, только object error. Есть ли у кого-нибудь предложения о том, как обойти это?

Я также должен указать, удаляю ли я http://CROSSDOMAINSERVER:PORT/ от var url при локальном отладке. Я получаю правильный ответ json. Почему кросс-домен не работает?

+1

Этот ответ неверен, если вы действительно хотите сделать JSONP. Возвращаемое значение из JSONP должно быть JavaScript-кодом для вызова функции, а не просто JSON. – Pointy

+0

Из последней строки вопроса, похоже, вы используете это из того же домена! Вы используете это из 'http: // localhost /'? –

+0

jsonp - единственный способ сделать запрос на перекрестный домен, хотя верно? – atrueresistance

ответ

3

Это ваш текущий ответ:

{ 
    "d": { 
     "__type": "ClientSideData:#ProdResourceToolService", 
     "details": "9", 
     "product": "Some Product", 
     "result": "1", 
     "site": "Somewhere, SD", 
     "systime": "2/6/2013 2:50:20 PM", 
     "team": "0000000000", 
     "tool": "1", 
     "user": "username" 
    } 
} 

Это действительный JSON строка. Однако его значение недействительно JSONP. Если это возможно, сделать сервис обернуть в JSON функции:

responseFunc({ 
    "d": { 
     "__type": "ClientSideData:#ProdResourceToolService", 
     "details": "9", 
     "product": "Some Product", 
     "result": "1", 
     "site": "Somewhere, SD", 
     "systime": "2/6/2013 2:50:20 PM", 
     "team": "0000000000", 
     "tool": "1", 
     "user": "username" 
    } 
}); 

И в вашем $.ajax() вызова добавьте свойство: jsonpCallback: 'responseFunc'.

Кроме того, я хотел бы предложить пропусканием data как объект:

data: { tool: 1, product: 'Some Product' } //etc... 

Если вы можете получить доступ к службе из ServerSide без каких-либо проблем вы можете создать HttpHandler (.ashx, например), и пусть генерировать JSON для вас. Тогда вам не придется иметь дело с проблемами перекрестного домена на стороне клиента.

Смежные вопросы