Reputation: 676
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.
$.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");
}
});
Edit: Here is my server-side code. I don't know how to return valid JSON from this.
<?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>";
}
Upvotes: 0
Views: 3137
Reputation: 20747
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
Upvotes: 0
Reputation: 4463
Why don't you try your ajax request like this:
$.post(url,{"jobtitle" : "job"},function(response)
{
console.log(response);
},'json').error(function()
{
alert("error with Ajax request");
});
Upvotes: 0
Reputation: 4110
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.
Upvotes: 0
Reputation: 24655
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.
Upvotes: 1