2013-08-02 38 views
0

我想使用JSON作爲Ajax請求(使用jQuery)的返回類型,但我的代碼總是導致錯誤。我試過改變json和jsonp之間的MIME類型,但無濟於事。Ajax請求不與數據類型「jsonp」或「JSON」

我也不確定是否正確格式化數據:部分。我知道我需要將所有信息都包含在JSON字符串中,但我不知道它是否正確。

$.ajax({ 

    type: "POST", 
    url: '-----', 
    dataType: "jsonp", 
    data: '{"jobtitle":"job"}', 

    beforeSend:function(){ }, 


    success: function(data){ 
     var data = $.parseJSON(data);   

    }, 
    error: function(){ 
     alert("error with Ajax request"); 
    } 

}); 

編輯:這是我的服務器端代碼。我不知道如何從中返回有效的JSON。

<?php 


$jobtitle = $_POST["jobtitle"]; 
$city = $_POST["city"]; 
$state = $_POST["state"]; 



$url = "http://www.indeed.com/jobs?q=". $jobtitle ."&l=". $city ."%2C". $state; 
$document = new DOMDocument; 

$html = file_get_contents($url); 
$document ->loadHTML($html); 
$xpath= new DOMXPath($document); 

$results = $xPath->query('//div[@id="searchCount"]'); 

$string = ""; 

if ($results){ 
    for ($i=0; $i < $results->length; $i++) { 
      $node = $results->item($i)->textContent; 


    } 
    $exp = explode(" ", $node); 

    print "Number of jobs: <b>".$exp[5]. "</b>"; 


} 
+4

dataType是***返回***的數據,沒有發送,所以你的服務器或任何你聯繫的返回有效的JSON? – adeneo

+2

顯示您的服務器端代碼請 – 2013-08-02 18:41:06

+1

我認爲使用POST和jsonp是你的問題。 –

回答

1

採取單引號了這種

data: '{"jobtitle":"job"}', 

,使其

data: {"jobtitle":"job"}, 

你的數據類型也許應該json。帶填充的JSON(jsonp)用於跨域ajax(ish)請求。

,並在您的成功回調的數據將是一個JSON對象不是一個JSON字符串所以不需要

var data = $.parseJSON(data); 

0

無論你的服務器代碼是什麼,你都不能簡單地致電$.parseJSON(data)。 如果服務器實際上返回JSONP的data格式會像

clientSideMethodName({ ... actual JSON data ... }); 

,如果服務器返回JSON,你必須a)指明在通過dataType屬性您的要求或b)完全刪除該屬性有jQuery去猜測。 jQuery非常棒,所以我認爲它會正確地猜測 - 無論哪種情況,它都會自動爲您調用.parseJSON(),因此您的手動調用也會失敗。

0

爲什麼不試試你的Ajax請求是這樣的:

$.post(url,{"jobtitle" : "job"},function(response) 
    { 
    console.log(response); 
},'json').error(function() 
     { 
      alert("error with Ajax request"); 
     }); 
+0

回調中的數據將是json而不是json字符串,因此parseJSON將不起作用 – Orangepill

+0

實際上,如果它不是json字符串.. – Aditya

0

相反的:

print "Number of jobs: <b>".$exp[5]. "</b>"; 

你需要這樣做:

// send sexy JSON formatted string back to the AJAX call ;) 
echo json_encode("Number of jobs: <b>".$exp[5]. "</b>"); 

爲了進一步使JSON有用的工具和學習這段代碼:

// send even sexier array formatted in JSON ;) ;) 
echo json_encode(array('index1'=>'somevalue1','index2'=>'somevalue2','index3'=>'somevalue3','index4'=>'somevalue4')); 

,而不是另外:

dataType: "jsonp", 

儘量只JSON:

dataType: "json", 

我想JSONP有事做跨域請求。我還沒有實現JSONP尚未快感,但我認爲這就是它:P

你也可以擺脫這樣的:

var data = $.parseJSON(data); 

,讓這個一掄在它的位置

console.log(data); // this is my best buddy