Php Ajax从zend rest控制器将成功读取为错误
我正在使用ajax对构建在Zend框架上的API进行POST请求。API返回一条成功的JSON消息,但AJAX将其作为错误读取 我已经阅读了大约六篇文章,并实现了它们的解决方案。没有什么是有用的 API中的我的Zend控制器Php Ajax从zend rest控制器将成功读取为错误,php,jquery,ajax,zend-framework,zend-rest,Php,Jquery,Ajax,Zend Framework,Zend Rest,我正在使用ajax对构建在Zend框架上的API进行POST请求。API返回一条成功的JSON消息,但AJAX将其作为错误读取 我已经阅读了大约六篇文章,并实现了它们的解决方案。没有什么是有用的 API中的我的Zend控制器 class LeadController extends Zend_Rest_Controller { public function init() { $this->_helper->viewRenderer->setNo
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;
}
}
我使用Charles来验证响应代码和内容类型是否设置正确
这是我的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);
}
});
success函数从未被调用。它总是错误函数。我做错了什么
更新
我在Chrome上试用过,得到一条xmlhttprequest无法加载访问控制允许源错误消息。经过一些调查,我发现不能使用AJAX访问其他域上的URL。我在与Javascript相同的域上创建了一个PHP脚本,Javascript通过curl调用API。我已经将我的ajax脚本设置为使用中间脚本,它工作得很好
我只是更改了ajax函数中的url行以使其正常工作
url: 'localscript.php',
下面是localscript.php文件,它调用Zend Rest API以防任何人发现它有用
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);
if($\u服务器['REQUEST\u METHOD']='POST'){
//从POST添加字段
foreach($\发布为$key=>$value){
$data[$key]=$value;
}
//url为帖子提供数据
$fields\u字符串=“”;
foreach($key=>$value形式的数据){
$fields_string.=$key.'='.urlencode($value)。'&';
}
rtrim($fields_string,&');
//开放连接
$ch=curl_init();
//设置url、POST变量数和POST数据
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(兼容;MSIE 6.0;Windows NT 5.1;.NET CLR 1.1.4322)');
//执行职务
$result=curl\u exec($ch);
$info=curl\u getinfo($ch);
$start=stripos($result,“我认为您必须为$.ajax函数添加数据类型:'jsonp'
参数。了解更多信息
此外,Zend还有Zend\u Controller\u Action\u Helper\u Json
,它删除布局并发送正确的内容类型
例如:
public function deleteAction()
{
$this->_helper->json(array(
'msg' => 'Lead has been deleted.',
'success' => true));
}
这完全是一个猜测,但您是否尝试过不设置HttpResponseCode?我没有。尝试过。没有乐趣,但谢谢。@liz,既然您正在向另一个域发出请求,请尝试使用:数据类型:“jsonp”有效!谢谢。我可能会将php脚本作为中间人,但很高兴有一个解决方案。@b.b3rn4rd,谢谢,我不知道“json”助手。