2013-08-02 18:39
浏览 103


I'm trying to use JSON as a return type for an Ajax request (using jQuery) but my code always results in an error. I've tried changing the MIME type between json and jsonp but to no avail.

I'm also not sure if I'm formatting the data: part correctly. I understand that I need to wrap all of its information in a string for JSON, but I don't know if it's correct.


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

    beforeSend:function(){ },

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

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


Edit: Here is my server-side code. I don't know how to return valid JSON from this.


$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条回答 默认 最新

  • dryb38654
    dryb38654 2013-08-02 18:46

    Take the single quotes out of this

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

    to make it

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

    Your datatype should probably be json. JSON with padding (jsonp) is for cross domain ajax(ish) requests.

    and in your success callback data will be a json object not a json string so

     var data = $.parseJSON(data);  

    Is not needed.

    点赞 评论
  • doukuilian8365
    doukuilian8365 2013-08-02 18:49

    No matter what your server code is, you cannot simply call $.parseJSON(data). If the server actually returns JSONP, the format of data will be like

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

    If your server returns JSON, you must a) specify that in your request through the dataType attribute or b) remove the attribute completely to have jQuery go guessing. jQuery is awesome so I think it would guess right corretly - and in either case, it would automatically call .parseJSON() for you, so your manual call would fail then too.

    点赞 评论
  • du8864
    du8864 2013-08-02 18:49

    Why don't you try your ajax request like this:

    $.post(url,{"jobtitle" : "job"},function(response) 
              alert("error with Ajax request");
    点赞 评论
  • dsh1102
    dsh1102 2013-08-02 20:55

    Instead of:

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

    You need to do this:

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

    To further make JSON useful implement and learn this snippet:

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

    Also instead of:

    dataType: "jsonp",

    Try just json:

    dataType: "json",

    I think jsonp has something to do with cross-domain requests. I haven't had the pleasure of implementing JSONP yet but I think that's what it does :p

    Also you can get rid of this:

    var data = $.parseJSON(data);

    And give this a whirl in it's place

    console.log(data); // this is my best buddy
    点赞 评论