我正在尝试使用JSON作为Ajax请求的返回类型(使用jQuery),但我的代码总是会导致错误。我试过改变json和jsonp之间的MIME类型,但无济于事。
我也不确定我是否正在格式化数据:部分正确。我知道我需要将所有信息都包含在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>";
}
答案 0 :(得分:1)
从这个
中取出单引号 data: '{"jobtitle":"job"}',
使其成为
data: {"jobtitle":"job"},
您的数据类型可能应为json
。带填充(jsonp)的JSON用于跨域ajax(ish)请求。
并且在你的成功中,回调数据将是一个json对象,而不是json字符串,所以
var data = $.parseJSON(data);
不需要。
答案 1 :(得分:0)
无论您的服务器代码是什么,都不能简单地拨打$.parseJSON(data)
。
如果服务器实际返回JSONP,则data
的格式将类似于
clientSideMethodName({ ... actual JSON data ... });
如果您的服务器返回JSON,您必须a)通过dataType
属性在您的请求中指定或者b)完全删除该属性以让jQuery进行猜测。
jQuery很棒,所以我认为它会正确猜测 - 在任何一种情况下,它都会自动为你调用.parseJSON()
,所以你的手动调用也会失败。
答案 2 :(得分:0)
为什么不试试这样的ajax请求:
$.post(url,{"jobtitle" : "job"},function(response)
{
console.log(response);
},'json').error(function()
{
alert("error with Ajax request");
});
答案 3 :(得分: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