Ajax响应状态200但显示错误消息

时间:2015-09-18 09:59:44

标签: javascript jquery ajax

我的状态为200,但在错误消息alert("error...");中显示的是打印消息。为什么这样?

function makeSelect() {
    var blouseoption = document.querySelector('input[name="blouseoption"]:checked').value;
    var url = "http://dukano.co/sakhidev/retailon/productoption/values";
    alert(url);
    var jsondata = $j('#customoption').serialize();     
    alert("jsondata: " + JSON.stringify(jsondata));

    $j.ajax({    
        type : 'POST',
        url : url,
        data : jsondata,
        dataType : 'json',
        success : function(response) {
            console.log("calling");
            console.log(response);
            alert("call success");
            alert("response data:" + JSON.stringify(response));  
            if (response.status == 200) {
                console.log("yes");
            } else if (response.status == "error") {
                console.log("no");
            }

        },
        error : function(response) {
            alert("error...");
            alert("response:" + JSON.stringify(response));
            console.log(response);
        }
    });
}

Magento的控制器函数返回json值

  public function valuesAction(){
            $blouseoption = $this->getRequest()->getParam('blouseoption');
            $sareefinishing = $this->getRequest()->getParam('sareefinishing');
            $data = array( 'sfinishing' => $sareefinishing, 'layout' => $this->getLayout());
            Mage::dispatchEvent('product_custom_option', $data);
            $jsonData = json_encode(array($blouseoption, $sareefinishing));
            $this->getResponse()->clearHeaders()
             ->setHeader('Content-type','application/json',true);
            $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($jsonData));
            $this->getResponse()->sendResponse();
    }

1 个答案:

答案 0 :(得分:1)

正在使用

 dataType: "json"

这会将响应评估为JSON并返回一个JavaScript对象。拒绝任何格式错误的JSON,并抛出一个解析错误。

这意味着如果服务器返回带有200 OK status的无效JSON,则jQuery将触发错误函数并将textStatus参数设置为"parsererror"

确保服务器返回有效的JSON。空响应也被认为是无效的JSON;你可以返回{}或null,例如验证为JSON。 尝试检查错误中的textStatus。

 error : function(jqXHR,textStatus,errorThrown)
   {console.log(textStatus)}

如果打印出“parsererror”,那么当然你的返回json有问题。请检查一下。

More Info