단순한 jQuery, PHP 및 JSONP의 예?
저는 같은 원산지 정책 문제에 직면해 있으며, 이 문제를 조사함으로써 JSONP를 사용하여 원산지 간 요청을 하는 것이 제 특정 프로젝트의 최선의 방법이라는 것을 알게 되었습니다.
JSONP에 대한 IBM의 기사를 읽고 있지만, 무슨 일이 일어나고 있는지 100% 알 수 없습니다.
여기서 필요한 것은 단순한 jQuery >PHP JSONP 요구(또는 용어가 무엇이든 상관없습니다) - 다음과 같습니다(분명히 틀렸습니다.이것은 단지 제가 달성하려고 하는 것에 대한 아이디어를 얻을 수 있도록 하기 위한 것입니다:).
j쿼리:
$.post('http://MySite.com/MyHandler.php',{firstname:'Jeff'},function(res){
alert('Your name is '+res);
});
PHP:
<?php
$fname = $_POST['firstname'];
if($fname=='Jeff')
{
echo 'Jeff Hansen';
}
?>
이것을 적절한 JSONP 요구로 변환하려면 어떻게 해야 합니까?그리고 반환 결과에 HTML을 저장해도 될까요?
$.getJ를 사용하는 경우외부 도메인의 SON은 JSONP 요청을 자동으로 수행합니다(예: 여기 내 트윗 슬라이더).
소스 코드를 보시면 제가 .getJ를 사용하여 Twitter API를 호출하고 있음을 알 수 있습니다.아들.
예를 들어 다음과 같습니다.이거는 테스트되어 동작하고 있습니다(http://smallcoders.com/javascriptdevenvironment.html에 접속하여 실제 동작 상황을 확인할 수 있습니다).
//JAVASCRIPT
$.getJSON('http://www.write-about-property.com/jsonp.php?callback=?','firstname=Jeff',function(res){
alert('Your name is '+res.fullname);
});
//SERVER SIDE
<?php
$fname = $_GET['firstname'];
if($fname=='Jeff')
{
//header("Content-Type: application/json");
echo $_GET['callback'] . '(' . "{'fullname' : 'Jeff Hansen'}" . ')';
}
?>
callback=? 및 +res를 확인합니다.풀네임
우선 JSONP를 사용하여 POST 요청을 할 수 없습니다.
기본적으로 스크립트 태그를 동적으로 삽입하여 데이터를 로드합니다.따라서 GET 요구만 가능합니다.
또한 데이터를 변수에 로드하기 위해 요청이 완료된 후 호출되는 콜백 함수로 데이터를 래핑해야 합니다.
이 전체 프로세스는 jQuery에 의해 자동화됩니다.$.getJ 사용만다만, 외부 도메인의 SON이 항상 기능하는 것은 아닙니다.나는 개인적인 경험으로 알 수 있다.
&callback=을 추가하는 것이 가장 좋습니까?를 참조해 주세요.
서버 측에서는 데이터가 이 콜백 함수에 포함되어 있는지 확인해야 합니다.
즉,
echo $_GET['callback'] . '(' . $data . ')';
편집:
Liam의 답변에 대해 코멘트를 할 만한 충분한 평이 아직 없기 때문에 해결책은 여기에 있습니다.
Liam의 라인을 교체합니다.
echo "{'fullname' : 'Jeff Hansen'}";
와 함께
echo $_GET['callback'] . '(' . "{'fullname' : 'Jeff Hansen'}" . ')';
기타 제안
JavaScript:
$.ajax({
url: "http://FullUrl",
dataType: 'jsonp',
success: function (data) {
//Data from the server in the in the variable "data"
//In the form of an array
}
});
PHP 콜백:
<?php
$array = array(
'0' => array('fullName' => 'Meni Samet', 'fullAdress' => 'New York, NY'),
'1' => array('fullName' => 'Test 2', 'fullAdress' => 'Paris'),
);
if(isset ($_GET['callback']))
{
header("Content-Type: application/json");
echo $_GET['callback']."(".json_encode($array).")";
}
?>
서버가 유효한 JSONP 어레이로 응답하도록 하려면 , JSON 를 괄호로 둘러싸 주세요.()
및 프리펜드callback
:
echo $_GET['callback']."([{'fullname' : 'Jeff Hansen'}])";
json_encode()를 사용하면 네이티브 PHP 어레이가 JSON으로 변환됩니다.
$array = array(
'fullname' => 'Jeff Hansen',
'address' => 'somewhere no.3'
);
echo $_GET['callback']."(".json_encode($array).")";
단순 jQuery, PHP 및 JSONP의 예를 다음에 나타냅니다.
window.onload = function(){
$.ajax({
cache: false,
url: "https://jsonplaceholder.typicode.com/users/2",
dataType: 'jsonp',
type: 'GET',
success: function(data){
console.log('data', data)
},
error: function(data){
console.log(data);
}
});
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
$.ajax({
type: "GET",
url: '<?php echo Base_url("user/your function");?>',
data: {name: mail},
dataType: "jsonp",
jsonp: 'callback',
jsonpCallback: 'chekEmailTaken',
success: function(msg){
}
});
return true;
컨트롤러 내:
public function ajax_checkjp(){
$checkType = $_GET['name'];
echo $_GET['callback']. '(' . json_encode($result) . ');';
}
이것을 사용해 주세요.
$str = rawurldecode($_SERVER['REQUEST_URI']);
$arr = explode("{",$str);
$arr1 = explode("}", $arr[1]);
$jsS = '{'.$arr1[0].'}';
$data = json_decode($jsS,true);
자..
$data['elemname']
을 사용하다
JSON 개체와 함께 jsonp 요청을 보냅니다.
요청 형식:
$.ajax({
method : 'POST',
url : 'xxx.com',
data : JSONDataObj, //Use JSON.stringfy before sending data
dataType: 'jsonp',
contentType: 'application/json; charset=utf-8',
success : function(response){
console.log(response);
}
})
언급URL : https://stackoverflow.com/questions/6809053/simple-jquery-php-and-jsonp-example
'programing' 카테고리의 다른 글
react를 사용하여 HTML5 데이터 속성을 동적으로 설정하려면 어떻게 해야 합니까? (0) | 2023.03.16 |
---|---|
같은 요소를 가진 두 JSON 개체를 다른 순서로 비교하려면 어떻게 해야 합니까? (0) | 2023.03.16 |
Wordpress 업데이트 mysql 테이블 (0) | 2023.03.16 |
지정되지 않은 경우 암시되는 액세스 수식자는 무엇입니까? (0) | 2023.03.16 |
React JS:Formik을 사용하여 이미지/파일 업로드를 처리하는 방법 (0) | 2023.03.16 |