我使用ajax做一個POST請求建立在Zend框架上的API。 API正在返回成功的JSON消息,但AJAX將其讀爲錯誤。Ajax讀取成功,因爲錯誤從zend休息控制器
我已閱讀了大約6篇文章並實施了他們的解決方案。沒有任何幫助。
我的Zend控制器從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響應,我已經驗證。
{"results":"success"}
我的AJAX代碼
$.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);
}
});
成功函數不會被調用。這總是錯誤功能。我究竟做錯了什麼?
UPDATE
我嘗試過了Chrome瀏覽器,並得到一個XMLHttpRequest不能加載訪問控制允許來源的錯誤消息。經過一番調查後,我發現你不能使用AJAX訪問不同域的URL。我在與通過curl調用API的Javascript相同的域上創建了一個PHP腳本。我已經將我的ajax腳本設置爲使用中間腳本,並且它工作得很好。
我只是改變了URL行的AJAX功能得到它的工作
url: 'localscript.php',
這裏是正在調用了Zend REST API的情況下,任何人發現它是有用的localscript.php文件。
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