2013-07-05 2 views
0

Так что я изучаю jsonp прямо сейчас, и сейчас я не могу заставить этот тестовый запрос работать.Сценарий не работает после первой попытки с jsonp

У меня есть файл, в котором происходит основной сценарий, похожий на этот.

(function(){ 
var jQuery; 

if (window.jQuery==undefined || window.jQuery.fn.jquery!=='1.8.1'){ 
var script_tag=document.createElement('script'); 
script_tag.setAttribute("type", "text/javascript"); 
script_tag.setAttribute("src","http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"); 

if(script_tag.readyState){ 
script_tag.onreadystatechange=function(){ 
    if(this.readyState=='complete' || this.readyState=='loaded'){ 
    scriptLoadHandler(); 
    } 
    }; 
}else{ 
    script_tag.onload=scriptLoadHandler; 
    } 
    (document.getElementsByTagName("head")[0] || document.documentElement).appendChild(script_tag); 
}else{ 
jQuery=window.jQuery; 
main(); 
} 

function scriptLoadHandler(){ 
jQuery=window.jQuery.noConflict(true); 
main(); 
} 

function main(){ 
$(document).ready(function($){ 
    var jsonp_url = "http://www.reflap.com/beta/assets/js/atest.php?callback=theresponse"; 
     $.getJSON(jsonp_url, 'name=Michael', function(data) { 
      alert (data.fullname); 
     }); 
}); 
} 
})(); 

А на сервере в atest.php у меня есть этот

<?php 
function theresponse(){ 
$fname= $_GET['name']; 

if($fname=='Michael'){ 
echo $_GET['callback']. '(' . "{'fullname':'Michael Yeah'}" . ')'; 
} 
else 
echo "Your not allowed here"; 
} 
?> 

Однако, когда я иду на jsfiddle.net и выполнить

<script src="http://www.reflap.com/beta/assets/js/widget2.js"></script> 

Это не запускается окно предупреждения , Что не так? Я действительно не вижу, где я ошибся.

ответ

0

$.getJSON предназначено для обычных JSON, а не JSONP. Попробуйте:

var jsonp_url = "http://www.reflap.com/beta/assets/js/atest.php'; 
$.ajax({ 
    url: jsonp_url, 
    dataType: 'jsonp', 
    data: { name: 'Michael' } 
}).done(function(data) { 
    alert(data.fullname); 
}); 

Вам не нужно ставить callback=? в URL, JQuery будет делать это сам.

+0

Мне не нужен jsonpCallback: «theresponse» в вызове ajax? –

+0

Вы можете сделать это, но это не требуется. Обычно jQuery использует собственную внутреннюю функцию обратного вызова. – Barmar

+0

Итак, есть ошибка в моем сервере, потому что я обернул его вокруг функции, называемой theresponse() –

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