저는 Zend Framework로 빌드 된 API에 대해 POST 요청을하기 위해 ajax를 사용하고 있습니다. API가 성공 JSON 메시지를 반환하고 있지만 AJAX는이를 오류로 읽습니다.Ajax는 zend rest controller에서 에러로 성공을 읽습니다.
나는 약 6 개의 게시물을 읽고 그들의 솔루션을 구현했습니다. 아무것도 도움이되지 않습니다. 내가 응답 코드와 콘텐츠 형식이 올바르게 설정되어 있는지 확인하기 위해 찰스를 사용하고있어 API
class LeadController extends Zend_Rest_Controller
{
public function init()
{
$this->_helper->viewRenderer->setNoRender(true);
}
public function postAction()
{
$this->getResponse()
->setHttpResponseCode(201)
->setHeader('Cache-Control','no-cache', true)
->setHeader('Content-Type', 'application/json', TRUE)
->setHeader('charset', 'utf-8', TRUE)
->appendBody(json_encode(array('results' => 'success')));
return;
}
}
에서
내 젠드 컨트롤러.
다음은 유효성을 확인한 JSON 응답입니다. 성공 함수가 절대 호출되지됩니다
$.ajax({
type: 'POST',
url: myurl,
data: inputs,
cache: 'false',
success: function(data){
console.log('success');
},
error: function(xhr, status, thrown){
console.log("Error:");
console.log(status);
}
});
{"results":"success"}
내 AJAX 코드입니다. 항상 오류 기능입니다. 내가 도대체 뭘 잘못하고있는 겁니까?
UPDATE
나는 크롬에 그것을 밖으로 시도하고 XMLHttpRequest의 액세스 제어 - 허용 - 기원 오류 메시지를로드 할 수 있어요. 조사를 한 후 AJAX를 사용하여 다른 도메인의 URL에 액세스 할 수 없다는 것을 알았습니다. 컬을 통해 API를 호출하는 자바 스크립트와 동일한 도메인에 PHP 스크립트를 만들었습니다. 중간 스크립트를 사용하도록 아약스 스크립트를 설정 했으므로 잘 작동합니다.
나는 그냥 여기url: 'localscript.php',
작업 누군가가 유용 발견 한 경우 젠드 나머지 API를 호출하는 localscript.php 파일의 가져 아약스 기능의 URL 라인을 변경했습니다.
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
//add fields from POST
foreach($_POST as $key => $value) {
$data[$key] = $value;
}
//url-ify the data for the POST
$fields_string ='';
foreach($data as $key=>$value) {
$fields_string .= $key.'='.urlencode($value).'&';
}
rtrim($fields_string,'&');
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)');
//execute post
$result = curl_exec($ch);
$info = curl_getinfo($ch);
$start = stripos($result, "<body");
$end = stripos($result, "</body");
$body = substr($result,$start,$end);
echo $body;
//close connection
curl_close($ch);
}
이 총 추측하지만 당신은 HttpResponseCode을 설정하지 않고 시도? –
나는 그렇지 않았다. 그것을 시도했다. 기쁨은 없지만 감사합니다. – liz