2013-08-02 5 views
0

Привет всем ниже мой код
Jquery Ajax с JSONP

$.ajax({ 
    'url': 'myUrl', 
    'dataType': 'jsonp', 
    crossDomain: true, 
    'data': { 
     // sample daa 
    }, 
    'success': function (data) { 
     alert("here::"); 
    }, 
    'error': function (jqxhr, status, errorThrown) { 
     alert("Failure, Unable to recieve content : " + status) 
     alert(jqxhr.responseText); 
    }) 
}) 

Я использую JSONP, как мой URL принадлежит другому домену и я могу получить код ответа в 200, и я могу в состоянии видеть данные в ответе (Checcked in Firebug), но ни один из методов успеха или ошибок не выполняется.
Пожалуйста, помогите мне в этом

ответ Update (скопированный с поджигатель)

{"documents":[{"trans":"sdsd","orig":"How","translit":"Elā","src_translit":""}],"dict":[{"pos":"unknown","terms":["dgssdg","sgsd"],"entry":[{"word":"gsdg","reverse_translation":["method","treatment","recipe","attitude","how","retro"],"score":0.000305442198},{"word":"మార్గము","reverse_translation":["way","route","road","entry","how","impasse"],"score":0.000305442198}],"base_form":"how","pos_enum":20}],"src":"en","server_time":12} 
+1

Действительно ли сервер возвращает JSONP? Если нет, вы не можете использовать JSONP. Также, пожалуйста, отформатируйте свой код здесь, я считаю, что все пробелы с левой стороны не нужны и не повышают читаемость. –

+0

@Felix возвращает действительные данные json, проверенные с помощью jsonlint – Siva

+2

Но он должен вернуть JSONP, а не JSON! См. Http://en.wikipedia.org/wiki/JSONP. JSON сам по себе недействителен JS, но JSONP требует, чтобы ответ был JavaScript (точнее, вызов функции). –

ответ

0

Это не работает, потому что ваш сервер скрипт, видимо, возвращает JSON вместо JSONP. Ваш скрипт на стороне сервера должен быть изменен так, чтобы он возвращал JSONP, если вы хотите, чтобы он мог вызвать его с помощью запроса AJAX кросс-домена.

Вы можете прочитать больше о JSONP здесь: http://en.wikipedia.org/wiki/JSONP

Так вместо:

{ 
    "documents": [ 
     { 
      "trans": "sdsd", 
      "orig": "How", 
      "translit": "Elā", 
      "src_translit": "" 
     } 
    ], 
    "dict": [ 
     { 
      "pos": "unknown", 
      "terms": [ 
       "dgssdg", 
       "sgsd" 
      ], 
      "entry": [ 
       { 
        "word": "gsdg", 
        "reverse_translation": [ 
         "method", 
         "treatment", 
         "recipe", 
         "attitude", 
         "how", 
         "retro" 
        ], 
        "score": 0.000305442198 
       }, 
       { 
        "word": "మార్గము", 
        "reverse_translation": [ 
         "way", 
         "route", 
         "road", 
         "entry", 
         "how", 
         "impasse" 
        ], 
        "score": 0.000305442198 
       } 
      ], 
      "base_form": "how", 
      "pos_enum": 20 
     } 
    ], 
    "src": "en", 
    "server_time": 12 
} 

сервер скрипт должен возвращать:

someCallback({ 
    "documents": [ 
     { 
      "trans": "sdsd", 
      "orig": "How", 
      "translit": "Elā", 
      "src_translit": "" 
     } 
    ], 
    "dict": [ 
     { 
      "pos": "unknown", 
      "terms": [ 
       "dgssdg", 
       "sgsd" 
      ], 
      "entry": [ 
       { 
        "word": "gsdg", 
        "reverse_translation": [ 
         "method", 
         "treatment", 
         "recipe", 
         "attitude", 
         "how", 
         "retro" 
        ], 
        "score": 0.000305442198 
       }, 
       { 
        "word": "మార్గము", 
        "reverse_translation": [ 
         "way", 
         "route", 
         "road", 
         "entry", 
         "how", 
         "impasse" 
        ], 
        "score": 0.000305442198 
       } 
      ], 
      "base_form": "how", 
      "pos_enum": 20 
     } 
    ], 
    "src": "en", 
    "server_time": 12 
}) 

, где клиент должен иметь возможность указать имя функции обратного вызова (someCallback), передав ее как параметр строки запроса.

Тогда вы могли бы выполнить перекрестный домен AJAX вызова:

$.ajax({ 
    url: 'http://example.com/some_endpoint', 
    jsonp: 'callback', 
    dataType: 'jsonp', 
    data: { firstName: 'john', lastName: 'smith' }, 
    success: function (result) { 
     alert(result); 
    }, 
    error: function (jqxhr, status, errorThrown) { 
     alert('Failure, Unable to recieve content : ' + status) 
     alert(jqxhr.responseText); 
    } 
}); 
+0

Спасибо за ответ, вместе с тем, я хотел бы знать, какая часть останавливается, чтобы выполнить успешный или сложный метод ошибок, он возвращает некоторые данные. – Siva

+0

Это тот факт, что ваш вызов AJAX блокируется одним и тем же ограничением политики происхождения, встроенным в браузеры , После изменения сценария на стороне сервера, чтобы вернуть JSONP, вы сможете успешно вызвать его. –

0

Если вы хотите использовать JSONP ваш код должен выглядеть следующим образом:

Пример стороне клиента

$.ajax({ 
     dataType : "jsonp", 
     url   : ' Some url ', 
     data  : { some json data }, 
     // this is jsonp callback that use must to return from server side 
     jsonpCallback : 'getResponse' 
    }); 

сервера сторона должна вернуть что-то вроде этого:

echo "getResponse({ some json data })"; 
Смежные вопросы