Php Ajax从zend rest控制器将成功读取为错误

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

我正在使用ajax对构建在Zend框架上的API进行POST请求。API返回一条成功的JSON消息,但AJAX将其作为错误读取

我已经阅读了大约六篇文章,并实现了它们的解决方案。没有什么是有用的

API中的我的Zend控制器

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”助手。