2013-04-09 5 views
0

Я использую скрипт ниже для отправки запроса на перекрестный домен ajax.Перекрестный вызов домена через Ajax

$(document).ready(function() 
{ 
var uniqcod=$(".abc").attr('id'); 
$.ajax({ 
    url:'abc.com', 
    data:{uniId:uniqcod}, 
    dataType: 'jsonp', 
    jsonp: 'callback', 
    crossDomain: true, 
    jsonpCallback:"jsonpCallback", 
    success: function(result){}, 
    error: function() {console.log('Failed!'); 
    console.log(arguments); } 
    }); 

function jsonpCallback(data){ 
    document.getElementById(uniqcod).innerHTML=data.content; 
} 

}); 

Но проблема в том, что этот скрипт не работает в функции jsoncallback. Каждый раз, когда я вызываю эту функцию, на консоли отображается сообщение об ошибке.

+0

изменение ' "jsonpCallback"' в 'jsonpCallback' Methinks –

+0

делает URL вы ударяете поддержки JSONP? – jbabey

+0

Попробуйте удалить "jsonp: 'callback', crossDomain: true, jsonpCallback:" jsonpCallback "," Я думаю, что они вам не нужны. – JackPoint

ответ

0

Вы можете сделать только междоменный запрос, если сервер, на который вы запрашиваете, отправляет заголовки CORS (Cross-origin sharing sharing).

Если это сервер, на котором вы контролируете, вам просто нужно сделать это изменение.

Если нет, вам необходимо проксировать данные с помощью сервера, который вы используете . control, чтобы добавить соответствующие заголовки.

Редактировать: Если это JSONP, вам необходимо убедиться, что сервер, на который вы запрашиваете, фактически поддерживает JSONP.

+0

Это не проблема. Потому что заголовки (Cross-origin sharing sharing) также включены на сервер, на который я отправляю запрос. проблема где-то в моем коде. –

0

Вы не можете совершать перекрестные вызовы с использованием jQuery, если только вы не прошли аутентификацию. Однако вы можете использовать YQL (язык запросов Yahoo) и совершать некоторые вызовы и получать xml, json-форматированные данные.

См. Пример ниже.

function requestCrossDomain(site, callback) { 

    // If no url was passed, exit. 
    if (!site) { 
     alert('No site was passed.'); 
     return false; 
    } 

    // Take the provided url, and add it to a YQL query. Make sure you encode it! 
    var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent('select * from html where url="' + site + '"') + '&format=xml&callback=cbFunc'; 

    // Request that YSQL string, and run a callback function. 
    // Pass a defined function to prevent cache-busting. 
    $.getJSON(yql, cbFunc); 

    function cbFunc(data) { 
    // If we have something to work with... 
    if (data.results[0]) { 
     // Strip out all script tags, for security reasons. 
     // BE VERY CAREFUL. This helps, but we should do more. 
     data = data.results[0].replace(/<script[^>]*>[\s\S]*?<\/script>/gi, ''); 

     // If the user passed a callback, and it 
     // is a function, call it, and send through the data var. 
     if (typeof callback === 'function') { 
      callback(data); 
     } 
    } 
    // Else, Maybe we requested a site that doesn't exist, and nothing returned. 
    else throw new Error('Nothing returned from getJSON.'); 
    } 
} 
+0

Я обрабатываю эту проблему с обоих концов. Я включил заголовок ('content-type: Access-Control-Allow-Origin: *'); header ('content-type: Access-Control-Allow-Methods: GET'); header ('content-type: text/javascript'); на сервере. Но проблема все та же. –

+0

Вы получаете какую-либо ошибку? если да, можете ли вы поделиться кодом ошибки и кодом состояния ошибки? – Harish

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