Ajax 请求不适用于数据类型 "jsonp" 或"json"



我试图使用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>";

}

从中去掉单引号

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

使其成为

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

您的数据类型可能应该是json。带填充的JSON(jsonp)用于跨域ajax(ish)请求。

在您的成功中,回调数据将是一个json对象,而不是json字符串,因此

 var data = $.parseJSON(data);  

不需要。

无论您的服务器代码是什么,都不能简单地调用$.parseJSON(data)。如果服务器实际返回JSONP,data的格式将类似

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

如果您的服务器返回JSON,您必须a)通过dataType属性在请求中指定,或者b)完全删除该属性以让jQuery进行猜测。jQuery非常棒,所以我认为它的猜测是正确的——在任何一种情况下,它都会自动为您调用.parseJSON(),所以您的手动调用也会失败。

为什么不这样尝试ajax请求:

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

代替:

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

最新更新